العمل مع Excel في Java: Apache POI والبدائل

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

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

ابدأ الدورة

العمل مع Excel في Java: نظرة عامة على المكتبات وأمثلة الكود



Java هي واحدة من أكثر اللغات شيوعًا للتطوير المؤسسي، حيث غالبًا ما تنشأ الحاجة إلى التفاعل مع جداول بيانات Microsoft Excel (صيغ .xls و .xlsx). سواء كان ذلك تصدير التقارير، أو استيراد البيانات من CRM، أو أتمتة التقارير المحاسبية - لا يمكن الاستغناء عن أداة موثوقة للعمل مع Excel. في هذه المقالة، سنستعرض المكتبات الرئيسية لـ Java، وإمكانياتها، ومزاياها وعيوبها، بالإضافة إلى تقديم أمثلة عملية للكود.



المكتبات الشائعة للعمل مع Excel في Java



يوجد حاليًا العديد من الحلول الناضجة. يعتمد اختيار مكتبة معينة على إصدار Excel، وحجم البيانات، والوظائف المطلوبة.



  • Apache POI - المعيار الفعلي. يدعم كلا الصيغتين (.xls و .xlsx)، ويسمح بالقراءة والكتابة وتنسيق الخلايا والعمل مع الصيغ والرسوم البيانية ووحدات الماكرو. مكتبة ثقيلة ولكنها الأقوى.
  • JExcelApi (jxl) - بديل أخف، ولكنه يدعم فقط الصيغة القديمة .xls. مناسب للمهام البسيطة التي لا تحتاج إلى دعم .xlsx.
  • EasyExcel (Alibaba) - إصدار خفيف يعتمد على POI، محسّن للعمل مع الملفات الكبيرة والمعالجة التدفقية. مثالي لاستيراد/تصدير ملايين الصفوف.
  • OpenCSV - ليس مباشرًا لـ Excel، ولكن للعمل مع CSV (التي يفتحها Excel). مثالي للتبادل البسيط للبيانات الجدولية بدون تنسيق.


مثال 1: قراءة ملف Excel باستخدام Apache POI



لننظر إلى سيناريو أساسي: فتح ملف data.xlsx وعرض محتويات الصفحة الأولى في وحدة التحكم.



import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;

public class ReadExcelExample { public static void main(String[] args) { String filePath = "data.xlsx";

try (FileInputStream fis = new FileInputStream(filePath); 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; default: System.out.print("?\\t"); } } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } }}


مثال 2: كتابة البيانات إلى Excel مع التنسيق



لننشئ ملفًا جديدًا report.xlsx مع عناوين وبيانات، مع تمييز العناوين بالخط العريض.



import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;

public class WriteExcelExample { public static void main(String[] args) { try (Workbook workbook = new XSSFWorkbook()) { Sheet sheet = workbook.createSheet("تقرير");

// نمط للعناوين CellStyle headerStyle = workbook.createCellStyle(); Font headerFont = workbook.createFont(); headerFont.setBold(true); headerFont.setFontHeight

توصيات