قم بإنشاء ملف Excel(.XLS و.XLSX) من C#




.net file-io (20)

كيف يمكنني إنشاء جدول بيانات Excel باستخدام C # دون الحاجة إلى تثبيت برنامج Excel على الجهاز الذي يشغل الرمز؟

https://code.i-harness.com


OpenXML هو أيضًا بديل جيد يساعد على تجنب تثبيت MS Excel على Server.The Open XML SDK 2.0 الذي توفره Microsoft يبسط مهمة معالجة حزم XML المفتوحة وعناصر مخطط XML المفتوحة الأساسية داخل الحزمة. تلزم واجهة برمجة تطبيقات XML المفتوحة (API) العديد من المهام الشائعة التي يقوم بها المطورون على حزم Open XML.

تحقق من ذلك من OpenXML: البديل الذي يساعد على تجنب تثبيت MS Excel على الخادم


أوافق على إنشاء جداول بيانات XML ، وإليك مثالاً حول كيفية القيام بذلك لـ C # 3 (الجميع فقط المدونات حول هذا الموضوع في VB 9: P) http://www.aaron-powell.com/linq-to-xml-to-excel


إذا كنت سعيدًا باستخدام تنسيق xlsx ، فجرّب مشروع GitHub codeplex . EPPlus . بدأت مع المصدر من ExcelPackage ، ولكن اليوم هو إعادة كتابة كاملة. يدعم النطاقات ، وتصميم الخلايا ، والرسوم البيانية ، والأشكال ، والصور ، و namesranges ، و autofilter والكثير من الأشياء الأخرى.


إليك طريقة لتنفيذ ذلك باستخدام LINQ to XML ، مع إكمال نموذج التعليمة البرمجية:

بسرعة استيراد وتصدير بيانات Excel مع LINQ إلى XML

إنها معقدة بعض الشيء ، حيث يجب عليك استيراد مساحات الأسماء وما إلى ذلك ، ولكنها تتيح لك تجنب أي تبعيات خارجية.

(أيضا ، بالطبع ، فإنه VB .NET ، وليس C # ، ولكن يمكنك دائما عزل الأشياء VB .NET في مشروعها الخاص لاستخدام XML Literals ، وتفعل كل شيء آخر في C #.)


إن أبسط وأسرع طريقة لإنشاء ملف Excel من C # هو استخدام أداة Open XML Productivity Tool. تأتي أداة الإنتاجية Open XML مع تثبيت Open XML SDK. أداة عكس المهندسين أي ملف Excel إلى رمز C #. ثم يمكن استخدام رمز C # لإعادة إنشاء هذا الملف.

نظرة عامة على العملية المعنية هي:

  1. قم بتثبيت Open XML SDK باستخدام الأداة.
  2. قم بإنشاء ملف Excel باستخدام أحدث إصدار من برنامج Excel بالمظهر المطلوب. DesiredLook.xlsx .
  3. باستخدام الأداة ، افتح DesiredLook.xlsx وانقر على زر Reflect Code بالقرب من الجزء العلوي.
  4. سيتم إنشاء رمز C # لملفك في الجزء الأيسر من الأداة. أضف هذا إلى حل C # الخاص بك وقم بتوليد الملفات بتلك النظرة المرغوبة.

كمكافأة ، يعمل هذا الأسلوب لأي ملفات Word و PowerPoint. باعتبارك مطور C # ، ستقوم بإجراء تغييرات على الشفرة لتناسب احتياجاتك.

لقد قمت بتطوير تطبيق WPF بسيط على github الذي سيعمل على Windows لهذا الغرض. هناك فئة عنصر نائب تسمى GeneratedClass حيث يمكنك لصق التعليمة البرمجية التي تم إنشاؤها. إذا رجعت إلى إصدار واحد من الملف ، فستقوم بإنشاء ملف excel مثل:


الحل التجاري ، SpreadsheetGear for .NET سيفعل ذلك.

يمكنك مشاهدة نماذج ASP.NET المباشرة (C # و VB) here وتنزيل نسخة تقييم here .

إخلاء المسؤولية: أنا أملك SpreadsheetGear LLC



بعض الخيارات التي استخدمتها:

إذا كان XLSX أمرًا ExcelPackage : يعد ExcelPackage بداية جيدة ولكنه توفي عندما يتوقف المطور عن العمل. ExML التقطت من هناك وإضافة بعض الميزات. ExML ليس خيارًا سيئًا ، ما زلت ExML في بضعة مواقع إنتاج.

بالنسبة إلى جميع NPOI الجديدة ، على الرغم من ذلك ، فأنا أستخدم NPOI ، وهو منفذ .NET لـ Apache POI . يدعم NPOI 2.0 (Alpha) أيضًا XLSX.


حسنا،

يمكنك أيضًا استخدام مكتبة طرف ثالث مثل Aspose .

هذه المكتبة لها ميزة أنها لا تتطلب تثبيت برنامج Excel على جهازك والذي سيكون مثاليًا في حالتك.


قد ترغب بالفعل في التحقق من دروس التشغيل المتداخل . أنت تقول لا OLE (وهذا ليس كذلك) ، ولكن الطبقات التفاعلية سهلة الاستخدام للغاية.

قد يعجبك إذا لم تجربها.

يرجى أن يكون حذر من stance مايكروسوفت على هذا:

لا توصي Microsoft حاليًا ولا تدعم تطبيقات التنفيذ التلقائي لـ Microsoft Office من أي تطبيق أو تطبيق عميل غير مراقب وغير تفاعلي (بما في ذلك ASP و ASP.NET و DCOM و NT Services) ، لأن Office قد يحمل سلوكًا غير مستقر و / أو حالة توقف تام عند تشغيل Office في هذه البيئة.


قد يكون خيار خفيف للغاية لاستخدام جداول HTML. قم فقط بإنشاء علامات الرأس والجسم والطاولة في ملف ، ثم احفظه كملف بامتداد .xls. هناك سمات خاصة بـ Microsoft يمكنك استخدامها لتصميم الإخراج ، بما في ذلك الصيغ.

أدرك أنك قد لا ترميز هذا في تطبيق ويب ، ولكن هنا example لتكوين ملف Excel عبر جدول HTML. يمكن استخدام هذه التقنية في حالة ترميز تطبيق وحدة التحكم أو تطبيق سطح المكتب أو الخدمة.



ما عليك سوى إضافة مرجع آخر إلى حل تابع لجهة خارجية يتناول مشكلتك مباشرة: http://www.officewriter.com

(إخلاء المسؤولية: أعمل لدى SoftArtisans ، الشركة التي تصنع OfficeWriter)


هل سبق لك أن حاولت sylk؟

لقد كنا نستخدم لإنشاء جداول بيانات في آسيا الكلاسيكية مثل sylk والآن نحن نبحث عن excelgenerater أيضا.

مزايا sylk هي ، يمكنك تنسيق الخلايا.


يمكنك إنشاء ملفات Excel منسقة بشكل جيد باستخدام هذه المكتبة: http://officehelper.codeplex.com/documentation
انظر أدناه عينة:

using (ExcelHelper helper = new ExcelHelper(TEMPLATE_FILE_NAME, GENERATED_FILE_NAME))
{
    helper.Direction = ExcelHelper.DirectionType.TOP_TO_DOWN;
    helper.CurrentSheetName = "Sheet1";
    helper.CurrentPosition = new CellRef("C3");

    //the template xlsx should contains the named range "header"; use the command "insert"/"name".
    helper.InsertRange("header");

    //the template xlsx should contains the named range "sample1";
    //inside this range you should have cells with these values:
    //<name> , <value> and <comment>, which will be replaced by the values from the getSample()
    CellRangeTemplate sample1 = helper.CreateCellRangeTemplate("sample1", new List<string> {"name", "value", "comment"}); 
    helper.InsertRange(sample1, getSample());

    //you could use here other named ranges to insert new cells and call InsertRange as many times you want, 
    //it will be copied one after another;
    //even you can change direction or the current cell/sheet before you insert

    //typically you put all your "template ranges" (the names) on the same sheet and then you just delete it
    helper.DeleteSheet("Sheet3");
}        

حيث تبدو العينة على النحو التالي:

private IEnumerable<List<object>> getSample()
{
    var random = new Random();

    for (int loop = 0; loop < 3000; loop++)
    {
        yield return new List<object> {"test", DateTime.Now.AddDays(random.NextDouble()*100 - 50), loop};
    }
}


يمكنك استخدام مكتبة تسمى ExcelLibrary. إنها مكتبة مجانية مفتوحة المصدر تم نشرها على Google Code:

ExcelLibrary

يبدو أن هذا هو منفذ PHP ExcelWriter الذي ذكرته أعلاه. لن يكتب إلى تنسيق .xlsx الجديد بعد ، لكنهم يعملون على إضافة تلك الوظيفة في.

انها بسيطة جدا وصغيرة وسهل الاستخدام. بالإضافة إلى أنه يحتوي على DataSetHelper يتيح لك استخدام DataSets و DataTables للعمل مع بيانات Excel بسهولة.

يبدو أن ExcelLibrary يعمل فقط مع تنسيق Excel الأقدم (ملفات .xls) ، ولكن قد يكون إضافة دعم في المستقبل لتنسيقات 2007/2010 الأحدث.

يمكنك أيضًا استخدام EPPlus ، الذي يعمل فقط مع ملفات تنسيق Excel 2007/2010 (ملفات .xlsx).

هناك بعض الأخطاء المعروفة مع كل مكتبة كما هو مذكور في التعليقات. وبشكل عام ، يبدو أن EPPlus هو الخيار الأفضل مع مرور الوقت. يبدو أن يتم تحديثها وتوثيقها بشكل أكثر فاعلية.

أيضًا ، كما هو موضح بواسطة @ АртёмЦарионов أدناه ، يدعم EPPlus جداول Pivot وقد تحتوي ExcelLibrary على بعض الدعم ( مشكلة في Pivot table في ExcelLibrary )

في ما يلي رابطان للرجوع إليها بسرعة:
ExcelLibrary - GNU Lesser GPL
EPPlus - رخصة جنو العمومية الصغرى (LGPL)

هنا بعض كود المثال لبرنامج ExcelLibrary:

هنا مثال أخذ البيانات من قاعدة بيانات وإنشاء مصنف منه. لاحظ أن التعليمة البرمجية ExcelLibrary هي سطر واحد في الأسفل:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

إن إنشاء ملف Excel سهل للغاية. يمكنك أيضًا إنشاء ملفات Excel يدويًا ، ولكن الوظيفة السابقة هي ما أعجبني حقًا.



IKVM + POI

أو ، يمكنك استخدام Interop ...


Syncfusion Essential XlsIO يمكن القيام بذلك. لا تعتمد على Microsoft Office ولديها أيضًا دعمًا محددًا للأنظمة الأساسية المختلفة.

نموذج الكود:

//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

تتوفر مجموعة عناصر التحكم بأكملها مجانًا من خلال برنامج ترخيص المنتدى إذا كنت مؤهلاً (أقل من مليون دولار أمريكي من الأرباح). ملاحظة: أنا أعمل من أجل Syncfusion.





file-io