Apache POI: إنشاء ملف Excel وقراءته وتحريره في جافا

بشكل عام ، يتم استخدام جداول البيانات كثيرا في مجالات التمويل والمحاسبة لتسهيل حساب وإنشاء الفواتير وإدارة التقارير وما إلى ذلك. إذا كان أي جزء من التطبيق الخاص بك يتطلب مثل هذه العمليات: إنشاء أو قراءة أو كتابة ، تتوفر العديد من واجهات برمجة التطبيقات والأقوى هو API POI ل APACHE< / b>.

تتعامل واجهة برمجة تطبيقات POI أيضا مع مستندات Word و PowerPoint ، بمرور الوقت أصبح لدى المستخدمين ثقة أكبر.

تنزيل

يمكنك تنزيل واجهة برمجة التطبيقات من الصفحة APACHE POI. بعد التنزيل ، قم باستيراد .jar التالية: في مشروعك:
  • POI
  • poi-ooxml
  • poi-ooxml-schemas
  • xmlbeans

التأليف والكتابة إلى xls

الفئتان الرئيسيتان اللتان تعالجان ملفات Excel هما:

< / div>
HSSFWorkbook: لملفات Microsoft Excel 97 و 2003 ذات الامتداد xls.
XSSFWorkbook: لملفات Microsoft Excel 2007 ذات الامتداد xlsx.

تقوم التعليمة البرمجية التالية بإنشاء صفيف بقيم من أنواع مختلفة:

import java.io.FileNotFoundException ؛ 
import java.io.FileOutputStream;
import java.io.IOException;
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.xssf.usermodel.XSSFWorkbook;

public class Excel {
الفراغ العام الثابت الرئيسي (سلسلة [] args) {

//1. إنشاء مستند فارغ
XSSFWorkbook wb = XSSFWorkbook جديد (); < / > //2. إنشاء جدول بيانات فارغ
Sheet = wb.createSheet ("ورقة جديدة") ؛ < / BR / > //3. قم بإنشاء صف ووضع شيئا فيه
صف الصف = sheet.createRow ((قصير) 0); < / > //4. إنشاء خلية جديدة
خلية الخلية = row.createCell(0); < / > //5. تعيين القيمة
cell.setCellValue (1.2);

//أضف المزيد من الخلايا بأنواع مختلفة
/*int*/row.createCell(1).setCellValue(3);
/*char*/row.createCell(2).setCellValue('c');
/*String*/row.createCell(3).setCellValue ("سلسلة");
/*منطقي */row.createCell(4).setCellValue (خطأ);

ملف FileOutputStream ؛
جرب {
fileOut = جديد FileOutputStream ("nouveauFichier.xlsx") ؛
wb.write (fileOut);
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
< / pre>< / div>
الكتابة للتفوق باستخدام Apache poi< / a>< / div>

< / div>
نريد إدراج التاريخ والوقت الحاليين ، يتم إنشاء تنسيق التاريخ على النحو التالي:

< pre class = "prettyprint lang-java" > / / إدراج في الخلية F1 < br / >cell = row.createCell ((قصير) 6) ؛
cell.setCellValue (تاريخ جديد());
XSSFCellStyle cellStyle = wb.createCellStyle ();
XSSFDataFormat xssfDataFormat = wb.createDataFormat();
//create the date and time Format
cellStyle.setDataFormat(xssfDataFormat.getFormat("dd/mm/yyyy h:mm"));
cell.setCellStyle(cellStyle); < / pre>
Excel Apache poi insert date< / a>< / div>

تنسيق النص< / h2 >< / div>
يتضمن تنسيق النص: الخط والحجم وما إلى ذلك. مائل / غامق / تسطير واللون والخلفية والمحاذاة.

مثال على المحاذاة سنطبقه على الخلية التاريخ: < / div>

تغيير الخط

/*إنشاء خط جديد*/
Font الخط = wb.createFont ();
//size: 12px
font.setFontHeightInPoints ((قصير)12);
font.setFontName ("ساعي جديد") ؛
font.setItalic(true);
font.setBold(true);

/ * إنشاء نمط جديد * /
CellStyle cs = wb.createCellStyle () ؛
cs.setFont(font);
//style cell 3(D1)
row.getCell(3).setCellStyle(cs);
< / pre>< / div>
أباتشي بوي تغيير خط إكسل< / أ >< / ديف >< br / >< h3 >اللون والخلفية < / h3 >< / div>
< pre class = "prettyprint lang-java" > / * تغيير لون الخلفية * /
XSSFCellStyle csColor = wb.createCellStyle();
csColor.setFillForegroundColor (XSSFColor الجديد (اللون الجديد (194 ، 154 ، 250))) ؛
csColor.setFillPattern (csCouleur.SOLID_FOREGROUND) ؛
//تطبيق النمط على الخلية 3
row.getCell(2).setCellStyle(csColor);

/ * تغيير لون الخط * /
خط الخط = wb.createFont () ؛
font.setColor ((قصير) 45) ؛
CellStyle csCF = wb.createCellStyle ();
csCF.setFont (الخط) ؛
/ / تطبيق النمط على الخلية 0
row.getCell (0) .setCellStyle (csCF) ؛
< / pre>
apache poi تغيير لون الخط والخلفية Excel

دمج الخلايا

في هذا المثال، سنقوم بدمج وتوسيط أربع خلايا أفقيا وعموديا: B2 ، C2 ، B3 ، C3 مع addMergedRegion  الذي يأخذ كمعلمة نطاق الخلايا المراد دمجها.

import java.io.FileNotFoundException ؛ 
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.util.CellRangeAddress;

من الفئة العامة الانصهار {

الفراغ العام الثابت الرئيسي (سلسلة [] args) يلقي FileNotFoundException {
مصنف wb = HSSFWorkbook () الجديد ؛
ورقة ورقة = wb.createSheet ("ورقة 1") ؛

صف الصف = sheet.createRow ((قصير) 1) ؛
خلية الخلية = row.createCell ((قصير) 1) ؛
cell.setCellValue ("اختبار دمج الخلايا") ؛

sheet.addMergedRegion (عنوان الخلية الجديد (
1 ، // الصف الأول B2
2 ، // الصف الأخير B3
1 ، // العمود الأول C2
2 // العمود الأخير C3
)) ؛
/ * مركز * /
cell.getCellStyle () .setAlignment ((قصير) 2) ؛
cell.getCellStyle () .setVerticalAlignment ((قصير) 1) ؛

FileOutputStream fs = null ؛
جرب {
fs = جديد FileOutputStream ("testFusion.xlsx") ؛
wb.write (fs);
fs.close ();
} catch (IOException e) {
e.printStackTrace();
}
}
}
< / pre>
excel Apache Poi fusion cells< / a>< / div>

< / div>< / div>< / div>

استخدام الصيغة< / h2 >< / div>
Excel بشكل أساسي في حساب واستخدام الصيغ المعقدة أحيانا في الخلايا الناتجة. يوفر Apache poi طرقا فعالة للغاية لإضافة الخلايا واختبارها باستخدام صيغها.

يتعامل الكود التالي مع حساب بسيط لمتوسط الفصول الدراسية 4. ستكون الصيغة (A2 + B2 + C2 + D2) / 4.

< pre class = "prettyprint lang-java" >import java.io.File ؛
import java.io.FileNotFoundException ؛
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

Excel_formule الفئة العامة {

الفراغ العام الثابت الرئيسي (سلسلة [] args) {
XSSFWorkbook wb = XSSFWorkbook الجديد ();
ورقة XSSFSheet = wb.createSheet ("المتوسط") ؛

صف الصف = sheet.createRow ((قصير) 0);
row.createCell(0).setCellValue ("Quarter1");
row.createCell(1).setCellValue ("Quarter2");
row.createCell(2).setCellValue ("Quarter3") ؛
row.createCell (3) .setCellValue ("Quarter4") ؛
row.createCell (4) .setCellValue ("المتوسط") ؛

صف الصف 1 = sheet.createRow ((قصير) 1) ؛
row1.createCell (0) .setCellValue (2) ؛
row1.createCell (1) .setCellValue (5) ؛
row1.createCell (2) .setCellValue (1) ؛
row1.createCell (3) .setCellValue (7) ؛
row1.createCell (4) .setCellFormula ("(A2 + B2 + C2 + D2) / 4") ؛

محاولة {
FileOutputStream out = جديد FileOutputStream (ملف جديد ("formuletest.xlsx") ؛
wb.write (out) ؛
out.close ();
System.out.println ("تم إنشاء ملف Excel بنجاح") ؛

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
< / pre>
< / div >< div class = "فاصل" النمط = "واضح: كلاهما ؛ محاذاة النص: الوسط؛" >Excel apache poi calculus with formula< / a>< / div>

تقييم وتصفح الخلايا< / h2>< / div>
لعرض قيمة الخلية ، تحتاج إلى معرفة نوعها. يوفر Apache poi الفئة  FormulaEvaluator.evaluateFormulaCell الذي يحدد خانة الاختيار لمعرفة ما إذا كانت هناك صيغة. إذا كان الأمر كذلك ، فإنه يقيمها ويعيد نوع الصيغة.

import java.io.File; 
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

Excel_parcourir الفئة العامة {

الفراغ العام الثابت الرئيسي (سلسلة [] args) يلقي IOException {
ملف FileInputStream = ملف جديد FileInputStream (ملف جديد ("formuletest.xlsx") ؛
//إنشاء مثيل مصنف يشير إلى ملف XLSX
XSSFWorkbook wb = XSSFWorkbook جديد (ملف);
ورقة XSSFSheet = wb.getSheetAt(0);

FormulaEvaluator formulaEvaluator =
wb.getCreationHelper () .createFormulaEvaluator ();

ل (صف الصف: ورقة) {// استعراض الصفوف
ل (خلية الخلية: صف) {//تصفح الأعمدة
//تقييم نوع الخلية
التبديل (formulaEvaluator.evaluateInCell(cell).getCellType())
{
box Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t"); < / > الحوزة ؛
مربع Cell.CELL_TYPE_STRING:
System.out.print (cell.getStringCellValue () + "\t") ؛ < / > الحوزة ؛
}
}
System.out.println();

}
}
< / pre> Output

< pre class = "prettyprint lang-java" > الربع 1 الربع 2 الربع 3 الربع 4 المتوسط
2.0 5.0 1.0 7.0 3.75
< / pre>< / div>