العمل مع Excel في Java: نظرة عامة على المكتبات وأمثلة الكود
على الرغم من أن PythonLib مخصص لـ Python، إلا أن Java لا تزال واحدة من أكثر اللغات المطلوبة في التطوير المؤسسي، حيث يعد العمل مع جداول بيانات Excel مهمة يومية. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع Excel في Java، وإمكانياتها، ونقدم أمثلة عملية على الكود.
لماذا نحتاج إلى مكتبات Excel في Java؟
لا تحتوي Java على أدوات مدمجة لقراءة وكتابة ملفات Excel. لهذا الغرض، تُستخدم مكتبات خارجية تتيح:
- إنشاء دفاتر عمل Excel جديدة (تنسيقات XLS وXLSX).
- قراءة وتحرير الملفات الموجودة.
- تنسيق الخلايا ودمجها وتعيين الأنماط.
- العمل مع الصيغ والرسوم البيانية ووحدات الماكرو.
- تصدير البيانات من قواعد البيانات أو المصادر الأخرى.
المكتبات الرئيسية
1. Apache POI
Apache POI هي المكتبة الأكثر شهرة وقوة للعمل مع ملفات Microsoft Office في Java. تدعم كلاً من التنسيق القديم XLS (HSSF) والتنسيق الجديد XLSX (XSSF).
المزايا:
- دعم كامل لجميع إمكانيات Excel: الصيغ والأنماط والتنسيق الشرطي والرسوم البيانية.
- مجتمع نشط وتحديثات منتظمة.
- دعم القراءة والكتابة.
العيوب:
- استهلاك عالي للذاكرة عند العمل مع الملفات الكبيرة.
- واجهة برمجة تطبيقات معقدة للمبتدئين.
2. EasyExcel (Alibaba)
EasyExcel هي مكتبة خفيفة الوزن من Alibaba، تم إنشاؤها للعمل مع ملفات XLSX الكبيرة. تستخدم المعالجة التدفقية، مما يقلل بشكل كبير من استهلاك الذاكرة.
المزايا:
- الحد الأدنى من استهلاك الذاكرة (أقل بمقدار 100 مرة من POI).
- واجهة برمجة تطبيقات بسيطة وبديهية.
- دعم التعليقات التوضيحية لتعيين البيانات.
العيوب:
- لا يدعم التنسيق القديم XLS.
- دعم محدود للتنسيق.
3. JExcelApi (jxl)
مكتبة قديمة تدعم فقط تنسيق XLS. مناسبة للمهام البسيطة، لكنها لم تُحدّث منذ فترة طويلة ولا تعمل مع XLSX.
أمثلة الكود
مثال 1: قراءة ملف Excel باستخدام Apache POI
import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;
public class ReadExcel { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("data.xlsx"); Workbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + "\\t"); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + "\\t"); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + "\\t"); break; } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } }}مثال 2: كتابة البيانات إلى Excel باستخدام Apache POI
import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;
public class WriteExcel { public static void main(String[] args) { try (Workbook workbook = new XSSFWor