إنشاء Excel في C# بدون Microsoft Office: السحر تحت الغطاء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا "بدون Office" وماذا في الداخل؟

\n\n

إذا كنت قد بحثت يومًا عن كيفية إنشاء ملف Excel بلغة C#، فمن المحتمل أنك صادفت السؤال الشهير على Stack Overflow الذي حظي بعشرات الآلاف من المشاهدات. والألم الرئيسي هناك هو العبارة "بدون تثبيت Microsoft Office". لماذا؟ لأن سحب كائنات COM معك، والاعتماد على إصدار Excel على الخادم، ومواجهة أخطاء مثل "فشل استرداد مصنف فئة COM للمكون..." هو طريق الجحيم للمطور.

\n\n

ولكن كيف يمكن إنشاء ملفات .XLSX و .XLS؟ الإجابة تكمن في كيفية تنظيم التنسيق نفسه. Excel الحديث (بدءًا من عام 2007) هو مجرد أرشيف ZIP عادي يحتوي على ملفات XML بداخله. نعم، لم تسمع خطأ: خذ أي ملف .xlsx، وأعد تسميته إلى .zip، وافتحه - وسترى مجلدات xl و _rels و docProps والكثير من مستندات XML. كل ورقة، كل خلية، كل نمط - هو XML منظم بدقة. أما التنسيق القديم .XLS فهو تنسيق ثنائي (BIFF)، ولكن توجد له أيضًا حلول مفتوحة المصدر.

\n\n

في هذه المقالة، سنلقي نظرة تحت غطاء هذه العملية: سنستعرض المكتبات الشائعة، ونكتب كودًا حيًا، ونفهم ما يحدث حقًا عندما نستدعي Save(). هيا بنا!

\n\n

1. الأعمدة الثلاثة لـ C# للعمل مع Excel بدون Office

\n\n

حتى يومنا هذا، هناك ثلاثة متنافسين رئيسيين يحلون المشكلة "مباشرة من الصندوق". كل منهم يعمل مع التنسيق مباشرة، متجاوزًا Office المثبت.

\n\n

1.1. EPPlus (ترخيص LGPL / مملوك)

\n

المكتبة الأكثر شيوعًا لـ .NET. كانت مجانية في البداية، لكنها انتقلت منذ الإصدار 5.0 إلى ترخيص مدفوع للاستخدام التجاري. ومع ذلك، لا يزال من الممكن استخدامها للأغراض التعليمية والمشاريع الصغيرة (الإصدار 4.5.3.3 هو آخر إصدار مجاني). يعمل EPPlus فقط مع .XLSX.

\n\n

كيف يعمل تحت الغطاء: يستخدم EPPlus System.IO.Packaging (أرشيف ZIP نفسه) ويقوم بإنشاء ملفات XML وفقًا لمواصفات Office Open XML (OOXML). يمكنه إنشاء أنماط وصيغ ورسوم بيانية - كل ما تراه في Excel.

\n\n

1.2. ClosedXML

\n

مجاني، مفتوح المصدر (ترخيص MIT). يعمل أيضًا فقط مع .XLSX. يتميز بواجهة برمجة تطبيقات سهلة الاستخدام تذكرنا بالعمل مع Excel نفسه: أنت تعمل مع Workbook و Worksheet و Cell. تحت الغطاء - نفس Open XML، لكن ClosedXML يتولى كل الأعمال الروتينية لإنشاء هيكل XML.

\n\n

1.3. NPOI

\n

نسخة من مكتبة Apache POI الشهيرة بلغة Java. الميزة الرئيسية هي أنه يمكنه العمل مع كل من .XLSX (عبر XSSFWorkbook) و .XLS القديم (عبر HSSFWorkbook). مجاني، مفتوح المصدر (Apache 2.0). مثالي إذا كنت بحاجة إلى دعم التنسيقات القديمة.

\n\n

تحت الغطاء لـ .XLS: يكتب NPOI البيانات الثنائية مباشرة بتنسيق BIFF8. هذا أكثر تعقيدًا من XML، لكنه لا يتطلب ضغطًا.

\n\n

2. نكتب الكود: إنشاء ملف Excel بثلاث طرق

\n\n

لنقم بإنشاء تقرير بسيط مع عناوين وبيانات. فيما يلي أمثلة لكل مكتبة.

\n\n

2.1. مثال مع ClosedXML (الأسهل)

\n\n
using ClosedXML.Excel;\n\n// إنشاء كتاب\nusing (var workbook = new XLWorkbook())\n{\n    // إضافة ورقة\n    var worksheet = workbook.Worksheets.Add("تقرير");\n\n    // العناوين\n    worksheet.Cell(1, 1).Value = "الاسم";\n    worksheet.Cell(1, 2).Value = "العمر";\n    worksheet.Cell(1, 3).Value = "المدينة";\n\n    // البيانات\n    worksheet.Cell(2, 1).Value = "آنا";\n    worksheet.Cell(2, 2).Value = 28;\n    worksheet.Cell(2, 3).Value = "موسكو";\n\n    worksheet.Cell(3, 1).Value = "إيفان";\n    worksheet.Cell(3, 2).Value = 35;\n    worksheet.Cell(3, 3).Value = "سانت بطرسبرغ";\n\n    // نمط للعناوين\n    var headerRange = worksheet.Range("A1:C1");\n    headerRange.Style.Font.Bold = true;\n    headerRange.Style.Fill.BackgroundColor = XLColor.LightGray;\n\n    // عرض تلقائي للأعمدة\n    worksheet.Columns().AdjustToC                

المدونات

توصيات الكتب