三十二、Apache POI
32.1 介紹
Apache POI 是一個處理Miscrosoft Office各種文件格式的開源項目。簡單來說就是,我們可以使用POI在Java程序中對Miscrosoft Office各種文件進行讀寫操作。
一般情況下,POI都是用于操作Excel文件。
Apache POI 的應用場景:
-
銀行網銀系統導出交易明細
-
各種業務系統導出Excel報表
-
批量導入業務數據
32.2 入門案例
Apache POI 既可以將數據寫入Excel文件,也可以讀取Excel文件中的數據,接下來分別進行實現。
Apache POI的maven坐標:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version>
</dependency>
32.2.1 將數據寫入Excel文件
1). 代碼開發
package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;public class POITest {/*** 通過POI創建Excel 文件并且寫入文件內容*/public static void write() throws Exception {//在內存中創建一個Excel文件XSSFWorkbook excel = new XSSFWorkbook();//在Excel文件中創建一個Sheet頁XSSFSheet sheet = excel.createSheet("info");//在Sheet中創建一個行對象,rownum編號從0開始XSSFRow row = sheet.createRow(0);//創建單元格并且寫入文件內容row.createCell(0).setCellValue("姓名");row.createCell(1).setCellValue("城市");//創建一個新行row = sheet.createRow(1);row.createCell(0).setCellValue("張三");row.createCell(1).setCellValue("北京");row = sheet.createRow(2);row.createCell(0).setCellValue("李四");row.createCell(1).setCellValue("南京");//通過輸出流將內存中的Excel文件寫入到磁盤FileOutputStream out = new FileOutputStream(new File("D:\\info.xlsx"));excel.write(out);//關閉資源out.close();excel.close();}public static void main(String[] args) throws Exception {write();}
}
2). 實現效果
在D盤中生成info.xlsx文件,創建名稱為info的Sheet頁,同時將內容成功寫入。
32.2.2 讀取Excel文件中的數據
1). 代碼開發
/*** 通過POI讀取Excel文件中的內容*/
public static void read() throws Exception {InputStream inputStream = new FileInputStream(new File("D:\\info.xlsx"));//讀取磁盤上已經存在的Excel文件XSSFWorkbook excel = new XSSFWorkbook(inputStream);//讀取Excel文件中的第一個Sheet頁XSSFSheet sheet = excel.getSheetAt(0);//獲取Sheet中最后一行的行號int lastRowNum = sheet.getLastRowNum();for (int i=0;i<=lastRowNum;i++){//獲得某一行XSSFRow row = sheet.getRow(i);//獲得單元格對象String cellValue1 = row.getCell(0).getStringCellValue();String cellValue2 = row.getCell(1).getStringCellValue();System.out.println(cellValue1+" "+cellValue2);}//關閉資源inputStream.close();excel.close();
}public static void main(String[] args) throws Exception {//write();read();
}
2). 實現效果