Apache POI: إنشاء ملف Excel وقراءته وتحريره في جافا
بشكل عام ، يتم استخدام جداول البيانات كثيرا في مجالات التمويل والمحاسبة لتسهيل حساب وإنشاء الفواتير وإدارة التقارير وما إلى ذلك. إذا كان أي جزء من التطبيق الخاص بك يتطلب مثل هذه العمليات: إنشاء أو قراءة أو كتابة ، تتوفر العديد من واجهات برمجة التطبيقات والأقوى هو API POI ل APACHE< / b>.تتعامل واجهة برمجة تطبيقات POI أيضا مع مستندات Word و PowerPoint ، بمرور الوقت أصبح لدى المستخدمين ثقة أكبر.
تنزيل
يمكنك تنزيل واجهة برمجة التطبيقات من الصفحة APACHE POI. بعد التنزيل ، قم باستيراد .jar التالية: في مشروعك:- POI
- poi-ooxml
- poi-ooxml-schemas
- xmlbeans
التأليف والكتابة إلى xls
الفئتان الرئيسيتان اللتان تعالجان ملفات Excel هما:
< / div>
< / 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>< / 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>< / a>< / div>
تنسيق النص< / h2 >< / div>
يتضمن تنسيق النص: الخط والحجم وما إلى ذلك. مائل / غامق / تسطير واللون والخلفية والمحاذاة.مثال على المحاذاة سنطبقه على الخلية التاريخ: < / 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>دمج الخلايا
في هذا المثال، سنقوم بدمج وتوسيط أربع خلايا أفقيا وعموديا: 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>< / 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>