简介
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式, 该API的组件列表如下:
- POIFS - 该组件是所有其他POI元素的基本因素。 它用于显式读取不同的文件。
- HSSF - 用于读取和写入MS-Excel文件的xls格式。
- XSSF - 用于MS-Excel的xlsx文件格式。 常用,
- SXSSF - 用于比较大的xlsx文件格式。
- HWPF - 用于读写MS-Word的doc扩展文件。
- XWPF - 用于读写MS-Word的docx扩展文件。
- HSLF - 用于阅读,创建和编辑PowerPoint演示文稿。
- HDGF - 它包含MS-Visio二进制文件的类和方法。
- HPBF - 用于读写MS-Publisher文件。
excel有两个常用后缀 ,一个是较老的版本 后缀是 xls ,一个是xlsx 2007及以后版本生成的文件格式
xls和xlsx的区别
简单来说就是,我们可以使用 POI 在 Java 中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。
快速入门:
Apache POI既可以将数据写入Excel文件,也可以读取Excel文件中的数据,接下来分别进行实现。
导入依赖:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
1 将数据写入Excel表
使用的大致思路其实也和我们手动创建Excel一样
创建一个Excel文件 ======>> 创建一个Sheet页 ======>> 创建行 ======>> 创建行中的每一列
注意都是从0开始
@Test
public void testExcel() throws Exception {
// 创建一个Excel文件
XSSFWorkbook sheets = new XSSFWorkbook();
// 创建一个Sheet页
XSSFSheet sheet = sheets.createSheet("用户信息");
// 通过Sheet一行, 创建行
XSSFRow row1 = sheet.createRow(0);
// 创建行中的每一列
row1.createCell(1).setCellValue("姓名");
row1.createCell(2).setCellValue("城市");
// 创建第二行
XSSFRow row2 = sheet.createRow(1);
row2.createCell(1).setCellValue("张三");
row2.createCell(2).setCellValue(23);
XSSFRow row3 = sheet.createRow(2);
row3.createCell(1).setCellValue("王五");
row3.createCell(2).setCellValue(25);
FileOutputStream outputStream = new FileOutputStream("E:\\MyProject\\testPOI.xlsx");
sheets.write(outputStream);
// 关闭资源
outputStream.close();
sheets.close();
}
此时就会在 E:\\MyProject\\
生成一个 testPOI.xlsx
如下:
2 读取Excel表数据
下面就来读取刚才创建的文件
思路:
获取IO输入流 ======>> 得到当前文件对象 ======>> 获取Sheet对象 ======>> 得到行对象 ======>> 获取行中的单元格
@Test
public void testExcelRead() throws Exception {
// 获取IO输入流
FileInputStream inputStream = new FileInputStream("E:\\MyProject\\testPOI.xlsx");
// 通过构造器获取当前文件
XSSFWorkbook xlsx = new XSSFWorkbook(inputStream);
// 通过名称获取指定的sheet页
XSSFSheet userMessage = xlsx.getSheet("用户信息");
// 获取第一行
XSSFRow row = userMessage.getRow(0);
// 获取第一行中的第二列,第三个的数据(第二个单元格和第三个单元格)
XSSFCell oneTwo = row.getCell(1); // 姓名
XSSFCell oneThree = row.getCell(2); // 城市
System.out.println(oneTwo + " --- " + oneThree);
// 获取第二行第三行的数据, 这里就模拟假如有多行的情况下
// 获取最后一行的行号
int lastRowNum = userMessage.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
XSSFRow nowRow = userMessage.getRow(i);
XSSFCell oneTwoMessage = nowRow.getCell(1); // 姓名
XSSFCell oneThreeMessage = nowRow.getCell(2); // 城市
System.out.println(oneTwoMessage + " --- " + oneThreeMessage);
}
// 关闭资源
inputStream.close();
xlsx.close();
}
这里只是简单对POI中对Excel 中xlsx文件做了一个介绍, 其他的基本都大同小异没有太大的难度,对着APi 或文档即可直接使用,如果大家想看操作其他文件的实现, 可以参考下面官方文档和大佬的博客
官方文档(英文):
Overview (POI API Documentation) (51helpdoc.com)
推荐博客:
POI使用详解 - 空谷幽澜 - 博客园 (cnblogs.com)
POI中文API文档_poi中文api官方文档_weihubeats的博客-CSDN博客