1. 程式人生 > 其它 >Apache POI 操作Excel簡單入門使用

Apache POI 操作Excel簡單入門使用

Apache POI簡介

開發中經常會涉及到excel的處理,如匯出Excel,匯入Excel到資料庫中,操作Excel目前有兩個框架,一個是apache 的poi, 另一個是 Java Excel
Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式檔案讀和寫的功能。
​ 官方主頁: http://poi.apache.org/index.html
​ API文件: http://poi.apache.org/apidocs/index.html

建立一個put普通的maven專案

匯入相關依賴座標

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.14</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.14</version>
</dependency>

常用的類(POI結構)

HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能
HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能
HDGF - 提供讀Microsoft Visio格式檔案的功能
HPBF - 提供讀Microsoft Publisher格式檔案的功能
HSMF - 提供讀Microsoft Outlook格式檔案的功能
注意:使用wps的同學也可以使用poi

下面來寫兩個案例吧

1. 從Excel檔案讀取資料

POI操作Excel表格封裝了幾個核心物件:
XSSFWorkbook:工作簿
XSSFSheet:工作表
XSSFRow:行
XSSFCell:單元格

1:建立工作簿物件

 // 1.建立工作簿物件,並指定操作的檔案
XSSFWorkbook workbook = new XSSFWorkbook("H:\\temp\\goodstype.xlsx");

2:獲得工作表物件

 // 2.獲取工作表物件,既可以根據工作表的順序獲取,也可以根據工作表的名稱獲取
XSSFSheet sheetAt = workbook.getSheetAt(0);

3:遍歷工作表物件 獲得行物件

// 3.遍歷工作表獲得行物件
for (Row row : sheetAt) {
}


4:遍歷行物件 獲得單元格(列)物件

 // 4.遍歷行物件獲取單元格物件
for (Cell cell : row) {
	// 獲取單元格資料
	String cellValue = cell.getStringCellValue();
	System.out.println("cellValue = " + cellValue);
}

5:獲得資料

注意:這裡報了一個錯,原因是我的第一列是數值型別,當我們以getStringCellValue獲取時需要將該列改為文字型別

6:關閉

workbook.close();

還有一種方式獲取資料

//建立工作簿
XSSFWorkbook workbook = new XSSFWorkbook("H:\\temp\\goodstype.xlsx");
//獲取工作表,既可以根據工作表的順序獲取,也可以根據工作表的名稱獲取
XSSFSheet sheet = workbook.getSheetAt(0);
//獲取當前工作表最後一行的行號,行號從0開始
int lastRowNum = sheet.getLastRowNum();
for(int i=0;i<=lastRowNum;i++){
	//根據行號獲取行物件
	XSSFRow row = sheet.getRow(i);
	// 再獲取單元格物件
	short lastCellNum = row.getLastCellNum();
	for(short j=0;j<lastCellNum;j++){
		// 獲取單元格物件的值
		String value = row.getCell(j).getStringCellValue();
		System.out.println(value);
	}
}
workbook.close();

2.向Excel檔案寫入資料

package com.qbb.poi;

import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;

/**
 * @author QiuQiu&LL (個人部落格:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-03-17  10:37
 * @Description:
 */
public class WriteExcel {
    public static void main(String[] args) throws Exception {

        // 1.建立工作簿物件
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 2.建立工作表物件
        XSSFSheet sheet = workbook.createSheet("qiuqiu");
        // 3.建立行物件,0表示第一行
        XSSFRow row = sheet.createRow(0);
        // 設定頭部資訊
        row.createCell(0).setCellValue("ID");
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("成績");
        // 4.建立列(單元格)物件, 設定內容
        XSSFRow row1 = sheet.createRow(0);
        row1.createCell(0).setCellValue("1");
        row1.createCell(1).setCellValue("qiuqiu");
        row1.createCell(2).setCellValue(100);

        XSSFRow row2 = sheet.createRow(0);
        row2.createCell(0).setCellValue("2");
        row2.createCell(1).setCellValue("ll");
        row2.createCell(2).setCellValue("99");
        // 5.通過輸出流將workbook物件下載到磁碟
        FileOutputStream outputStream = new FileOutputStream("H:\\temp\\score.xlsx");
        workbook.write(outputStream);
        // 重新整理
        outputStream.flush();
        outputStream.close();
        workbook.close();
    }
}


注意:當我們打開了當前excel時,再去寫將會報錯,已被佔用;關閉excel再執行就好了

感覺沒有EasyExcel用的爽啊,有興趣的小夥伴可以去了解阿里的EasyExcel