العمل مع Excel في C# (.NET): دليل مفصل لـ EPPlus و ClosedXML
في التطوير الحديث على منصة .NET، غالبًا ما تنشأ الحاجة إلى إنشاء جداول بيانات Excel وقراءتها وتحريرها برمجيًا. قد يكون ذلك لتوليد التقارير، أو استيراد البيانات من قواعد البيانات، أو تصدير الإحصائيات، أو أتمتة العمليات التجارية. في هذه المقالة، سنستعرض اثنتين من أشهر وأقوى المكتبات للعمل مع Excel في C#: EPPlus و ClosedXML. تعمل كلتا المكتبتين مع تنسيق Open XML (XLSX) ولا تتطلبان تثبيت Microsoft Office.
لماذا يجب استخدام المكتبات لـ Excel؟
إن الإنشاء اليدوي لملفات XML لتنسيق XLSX أمر شاق للغاية وعرضة للأخطاء. توفر المكتبات، مثل EPPlus و ClosedXML، واجهة برمجة تطبيقات عالية المستوى تخفي كل تعقيدات العمل مع Open XML. تتيح لك:
- إنشاء ملفات Excel من الصفر مع تحكم كامل في التنسيق.
- قراءة البيانات من الجداول الموجودة مع دعم لأنواع الخلايا المختلفة.
- تحرير الخلايا والصفوف والأعمدة والأوراق.
- تطبيق الأنماط والخطوط والألوان والحدود والتنسيق الشرطي.
- العمل مع الصيغ والجداول المحورية والرسوم البيانية.
- تصدير البيانات إلى PDF (متاح في الإصدار المدفوع من EPPlus).
مكتبة EPPlus
EPPlus هي واحدة من أقدم وأكثر المكتبات وظيفية للعمل مع Excel في .NET. تدعم جميع الإمكانيات الأساسية لتنسيق XLSX، بما في ذلك الرسوم البيانية والجداول المحورية والتنسيق الشرطي ووحدات ماكرو VBA. بدءًا من الإصدار 5، انتقلت EPPlus إلى نموذج ترخيص LGPL مع قيود إضافية للاستخدام التجاري (مجاني للمشاريع التي يقل دخلها عن مليون دولار سنويًا).
تثبيت EPPlus
يمكن تثبيت المكتبة عبر NuGet Package Manager:
Install-Package EPPlusأو عبر .NET CLI:
dotnet add package EPPlusمثال: إنشاء ملف Excel بسيط باستخدام EPPlus
يوضح الكود التالي إنشاء ملف Excel مع عناوين وبيانات، بالإضافة إلى تطبيق تنسيق أساسي:
using OfficeOpenXml;using OfficeOpenXml.Style;using System.Drawing;
public void CreateExcelWithEPPlus(){ // تعيين سياق الترخيص (إلزامي لـ EPPlus 5+) ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using (var package = new ExcelPackage()) { // إضافة ورقة جديدة var worksheet = package.Workbook.Worksheets.Add("الموظفون");
// العناوين worksheet.Cells[1, 1].Value = "الاسم"; worksheet.Cells[1, 2].Value = "المنصب"; worksheet.Cells[1, 3].Value = "الراتب";
// تنسيق العناوين using (var range = worksheet.Cells[1, 1, 1, 3]) { range.Style.Font.Bold = true; range.Style.Fill.PatternType = ExcelFillStyle.Solid; range.Style.Fill.BackgroundColor.SetColor(Color.LightBlue); range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; }
// البيانات worksheet.Cells[2, 1].Value = "إيفان إيفانوف"; worksheet.Cells[2, 2].Value = "مطور"; worksheet.Cells[2, 3].Value = 150000;
worksheet.Cells[3, 1].Value = "ماريا بيتروفا"; worksheet.Cells[3, 2].Value = "محلل"; worksheet.Cells[3, 3].Value = 120000;
// تنسيق الأرقام worksheet.Cells[2, 3, 3, 3].Style.Numberformat.Format = "#,##0";
// ضبط العرض التلقائي للأعمدة worksheet.Cells[1, 1, 3, 3].AutoFitColumns();
// حفظ الملف var fileInfo = new FileInfo("employees.xlsx"); package.SaveAs(fileInfo); }}مكتبة ClosedXML
ClosedXML هي مكتبة خفيفة الوزن ومجانية تمامًا (ترخيص