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