更新時間:2022-12-09 11:28:32 來源:動力節點 瀏覽3010次
在本文中,我們將學習如何從 java 代碼讀取和寫入 excel 文件 (.xlsx)。由于 JDK 不提供直接的 API 來讀寫 XLSX 文件,我們將不得不依賴第三方庫來完成這項工作。幸運的是,有很多庫可供我們使用,比如可以使用Apache POI。
Apache POI 是一種流行的 API,它 允許程序員使用 Java 程序創建、修改和顯示 MS Office 文件。它是由 Apache 軟件基金會開發和分發的開源庫,用于使用 Java 程序設計或修改 Microsoft Office 文件。
不僅是excel文件,POI還能做很多事情:
XSSF (XML SpreadSheet Format) – 用于讀寫 Open Office XML (XLSX) 格式的文件。
HSSF (可怕的電子表格格式)——用于讀取和寫入 Microsoft Excel (XLS) 格式的文件。
HWPF (Horrible Word Processor Format) – 讀寫 Microsoft Word 97 (DOC) 格式文件。
HSMF (Horrible Stupid Mail Format)——Microsoft Outlook MSG 文件的純 Java 實現
HDGF (可怕的圖表格式)——Microsoft Visio 二進制文件的第一個純 Java 實現之一。
HPSF (可怕的屬性集格式)——用于從 Microsoft Office 文件中讀取“文檔摘要”信息。
HSLF (可怕的幻燈片布局格式)——Microsoft PowerPoint 文件的純 Java 實現。
HPBF (可怕的 PuBlisher 格式)——Apache 的 Microsoft Publisher 文件的純 Java 實現。
DDF (可怕的繪圖格式)——用于解碼 Microsoft Office 繪圖格式的 Apache POI 包。
以下步驟將指導您完成 excel(.XLSX) 文件的讀寫。
1.創建一個Spring Boot應用
您可以從創建它https://start.spring.io/或使用 IDE 創建應用程序,我們將隨時添加依賴項。
2.添加必要的依賴
打開 pom.xml,然后添加以下依賴項:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11-beta2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11-beta2</version>
</dependency>
如果您不使用 Maven,則將以下 JAR 文件添加到您的 Java 程序的類路徑中
poi-3.11-beta2.jar
commons-codec-1.9.jar
poi-ooxml-3.11-beta2.jar
poi-ooxml-schemas-3.11-beta2.jar
xmlbeans-2.6.0.jar
stax-api-1.0.1.jar
3.如何在java中讀取Excel文件(XLSX)
我們將閱讀的內容:
在java中讀取XLSX文件的方法:
public static void readXLSX() {
File file = new File("/home/auriga/Downloads/Read.xlsx");
try {
FileInputStream fis = new FileInputStream(file);
// finds the workbook instance for xlsx file
XSSFWorkbook myWorkBook = new XSSFWorkbook(fis);
// returns the first sheet
XSSFSheet mysheet = myWorkBook.getSheetAt(0);
Iterator<Row> rowIterator = mysheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
// for each row iterate through each column
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
}
}
System.out.println("");
}
}catch(Exception e) {
e.printStackTrace();
}
}
前兩行很容易理解,它們是從系統讀取文件,主要代碼從第四行開始,我們傳遞一個二進制輸入流來創建一個XSSFWorkBook類的實例,它代表一個 Excel 工作簿。
下一行給了我們一個工作表,我們從那里開始迭代每一行,然后是每一列。單元格代表工作表中的每個塊。這是我們讀取或寫入數據的地方。
單元格可以是任何類型,例如字符串、數字、布爾值等,因此我們需要在讀取之前檢查單元格的類型,因為我們有一個 switch case,它通過調用 getStringValue() 在讀取特定單元格值之前檢查類型, getNumericValue() 等
這就是您可以在 java 中讀取 XLSX 文件的確切方式。
4.如何寫入XLSX文件
寫作也類似于閱讀,我創建了另一種寫入 XLSX 文件的方法。工作簿和工作表類將保持不變。
寫入XLSX文件的方法:
public static void writeXLSX() {
File file = new File("/home/auriga/Downloads/Read.xlsx");
try {
FileInputStream fis = new FileInputStream(file);
// finds the workbook instance for xlsx file
XSSFWorkbook myWorkBook = new XSSFWorkbook(fis);
// returns the first sheet
XSSFSheet mysheet = myWorkBook.getSheetAt(0);
Map<String, Object[]> data = new HashMap<String,Object[]>();
data.put("1", new Object[]{"User 4",13});
data.put("2", new Object[]{"User 5",14});
data.put("3", new Object[]{"USer 6",15});
Set<String> rows = data.keySet();
int rownum = mysheet.getLastRowNum();
for(String key : rows) {
// Creating a new Row in existing XLSX sheet
Row row = mysheet.createRow(++rownum);
Object [] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if (obj instanceof String) {
cell.setCellValue((String) obj);
} else if (obj instanceof Boolean) {
cell.setCellValue((Boolean) obj);
} else if (obj instanceof Date) {
cell.setCellValue((Date) obj);
} else if (obj instanceof Integer) {
cell.setCellValue((Integer) obj);
}
}
}
// open an OutputStream to save written data into XLSX file
FileOutputStream os = new FileOutputStream(file);
myWorkBook.write(os);
System.out.println("Writing on XLSX file Finished ...");
}catch(Exception e) {
e.printStackTrace();
}
}
我們已經創建了一個地圖來存儲數據,我們需要將其寫入 excel 文件。然后迭代地圖,并開始借助 setCellValue 方法插入值,在此之前我們需要知道最后編輯的行號和單元格值的類型。
最后,我們需要打開一個輸出流來將寫入的數據保存到 XLSX 文件中。
輸出:
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習