最近做的一個小項目,需要讀取exel文件中的數值,用Java(emmm,因爲我用java比較熟練)寫算法進行計算後,再將處理得出的結果寫到exel表中。
所以就把目標瞄準在POI的學習。
首先,最基本的就是把依賴添加進pom文件中去:
<!--poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<!--ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
讀exel文件代碼如下,我的文件是.xlsm結尾的,所以用的是XSSF方式。如果是 .xls 結尾的文件,則用HSSF方式(即把XSSF部分改爲HSSF就可以了)。
注意要操作的.xlsm文件放在src/main/resources目錄下,當然也可以直接寫它的絕對路徑。
public void readInfo() throws Exception{
//Excel文件
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(ResourceUtils.getFile("classpath:財務信息.xlsm")));
//取工作表
XSSFSheet sheet = wb.getSheetAt(0);
//循環讀出每條記錄,第0行爲標題行,故從下標爲1的行開始取數值
for(int i = 1; i <= sheet.getLastRowNum();i++ ){
XSSFRow row = sheet.getRow(i);
XSSFCell codeCell = row.getCell(0);
codeCell.setCellType(XSSFCell.CELL_TYPE_STRING); //設置單元格格式爲String,否則無法用字符串接收一個將數字格式的cell
String code = codeCell.getStringCellValue();
Date date = row.getCell(1).getDateCellValue(); //單元格爲date格式
Double income = row.getCell(2).getNumericValue(); //單元格爲數字類型
}
寫exel文件:
public void writeExel() throws Exception{
String excelFileName = "classpath:財務報表.xlsm";// 文件名
String sheetName = "第一季度財務報表";// 工作表名
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet(sheetName);
// 循環寫入每條收入記錄的主碼和盈利額
for (int r = 1; r < 5; r++)
{
XSSFRow row = sheet.createRow(r);
XSSFCell codeCell = row.createCell(0);
codeCell.setCellValue(r);
XSSFCell profitCell1 = row.createCell(1);
profitCell1.setCellValue(500 * r);
}
FileOutputStream fileOut = new FileOutputStream(excelFileName);
// 將workbook寫到輸出流中
wb.write(fileOut);
fileOut.flush();
fileOut.close();
}
本篇文章只作爲一個簡單的示例,完整例子應該包含有數據的計算,但由於比較複雜,我就不把其他代碼貼出來了。我們只探討單純的POI讀寫操作。
參考文章: