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再运行就好了