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項目

image

導入相關依賴坐標

<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");

image

2:獲得工作表對象

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

image

3:遍歷工作表對象 獲得行對象

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

image
image

4:遍歷行對象 獲得單元格(列)對象

 // 4.遍歷行對象獲取單元格對象
for (Cell cell : row) {
	// 獲取單元格數據
	String cellValue = cell.getStringCellValue();
	System.out.println("cellValue = " + cellValue);
}

5:獲得數據
image
注意:這里報了一個錯,原因是我的第一列是數值類型,當我們以getStringCellValue獲取時需要將該列改為文本類型
image
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();
    }
}

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM