السلام عليكم،
يمكن قراءة ملفات Excel باستعمال مكتبة Apache POI.
مكتبة POI خاصة بملفات Microsoft بصفة عامة، لكن سأتطرق لملفات Excel فقط.
هذه المكتبة تُمكننا من قراءة وكتابة ملفات من Excel 97 إلى Excel 2007.
تحميل المكتبة
الموقع الخاص ب Apache POI هو http://poi.apache.org . ولنحميل المكتبة، يمكن الذهاب إلى صفحة التحميل http://poi.apache.org/download.html وتحميل النسخة 3.6، وهي النسخة المستقرة الحالية.
محتوى الأرشيف
قراءة الملف Excel
أولا ننشئ كائنا FileInputStream يحتوي على الملف Excel
FileInputStream input = new FileInputStream("test.xls");ثم ننشئ كائنا من صنف WorkBook، وهو يمثل مستندا Excel بالنسبة للمكتبة POI، ونمرر له الكائن FileInputStream الذي أنشأنا.
Workbook workBook = WorkbookFactory.create(input);
ثم نسترجع ال sheet الذي نريده. الأول يحمل الرقم 0
Sheet sheet = workBook.getSheetAt(0);
الآن، نريد استرجاع السطر الثاتي مثلا
Row row = sheet.getRow(1);
بعد أن استرجعنا السطر، سنقوم بقراءة الخلايا الموجودة فيه.
من أجل ذلك، إما أن نسترجع خلية محددة، مثلا الخلية الأولى:
Cell cell = row.getCell(0)
أو نسترجع Iterator يمكننا من المرور على كل خلايا السطر
Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()) {
Cell cell = iterator.next();
...لقراءة محتوى الخلية، يجب أولا أن نتعرف على نوع هذا المحتوى، ثم ننادي على الطريقة المناسبة. فمثلا الطريقة getBooleanCellValue خاصة بال boolean، و getNumericCellValue خاصة بالأعداد ...
Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()) {
Cell cell = iterator.next();
//////////////
int cellType = cell.getCellType();
switch (cellType) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
System.out.println("BLANK");
break;
}
}الكود
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class Main {
public static void main(String[] args) {
FileInputStream input = null;
Workbook workBook;
try {
input = new FileInputStream("test.xls");
workBook = WorkbookFactory.create(input);
Sheet sheet = workBook.getSheetAt(0);
Row row = sheet.getRow(1);
Iterator<Cell> iterator = row.cellIterator();
while (iterator.hasNext()) {
Cell cell = iterator.next();
int cellType = cell.getCellType();
switch (cellType) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
System.out.println(cell.getCellFormula());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
System.out.println("BLANK");
break;
}
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (InvalidFormatException ex) {
ex.printStackTrace();
} finally {
try {
input.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}عند تجميع هذا المثال البسيط، سنحتاج فقط للملفين poi-3.6-20091214.jar و poi-ooxml-3.6-20091214.jar
javac -cp .:poi-3.6/poi-3.6-20091214.jar:poi-3.6/poi-ooxml-3.6-20091214.jar Main.java
لكن بالنسبة للملفات xslx، أي Excel 2007، فسنحتاج أيضا إلى الملفات الموجودة في المجلد ooxml-lib والمجلد lib
المشروع Netbeans مرفق





