介绍
Apache POl是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
一般情况下,POI都是用于操作 Excel 文件。
Apache POI的主要组件包括:
- HSSF(Horrible SpreadSheet Format):用于操作Excel文件的.xls格式。
- XSSF(XML SpreadSheet Format):用于操作Excel文件的.xlsx格式。
- HWPF(Horrible Word Processor Format):用于操作Word文件的.doc格式。
- XWPF(XML Word Processor Format):用于操作Word文件的.docx格式。
- HSLF(Horrible SlideShow Format):用于操作PowerPoint文件的.ppt格式。
- XSLF(XML SlideShow Format):用于操作PowerPoint文件的.pptx格式。
Apache POI的应用场景:
- 银行网银系统导出交易明细
- 各种业务系统导出Excel报表
- 批量导入业务数据
使用步骤
- 导入Apache POI的maven坐标
java
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
- 将数据写入到Excel文件中
java
/**
* 创建并写入Excel文件的方法
* 此方法创建一个Excel工作簿,添加一张工作表,并写入一些数据,最后将工作簿保存到指定的文件路径
* @throws Exception 如果在文件写入过程中发生错误,则可能抛出异常
*/
public static void write() throws Exception {
// 创建一个Excel工作簿
XSSFWorkbook sheets = new XSSFWorkbook();
// 创建一张名为"jacky"的工作表
XSSFSheet sheet = sheets.createSheet("jacky");
// 创建第一行,并在该行的第1、2列写入表头信息
XSSFRow row = sheet.createRow(1);
row.createCell(1).setCellValue("名字");
row.createCell(2).setCellValue("年龄");
// 创建第二行,并在该行的第1、2列写入名字和年龄数据
row = sheet.createRow(2);
row.createCell(1).setCellValue("jacky");
row.createCell(2).setCellValue(18);
// 创建第三行,并在该行的第1、2列写入名字和年龄数据
row = sheet.createRow(3);
row.createCell(1).setCellValue("tom");
row.createCell(2).setCellValue(19);
// 创建文件输出流,用于将Excel工作簿写入到E盘的test.xlsx文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("E:\\test.xlsx"));
// 将Excel工作簿写入到输出流中
sheets.write(fileOutputStream);
// 刷新输出流,确保所有数据被写入文件
fileOutputStream.flush();
// 关闭输出流,释放系统资源
fileOutputStream.close();
// 关闭Excel工作簿,释放系统资源
sheets.close();
}
代码运行后生成的Excel表格如下:
- 读取Excel文件中的数据
java
/**
* 从Excel文件中读取数据并打印
* 此方法演示了如何使用Apache POI库读取Excel文件的特定工作表中的数据
* 它打开了一个Excel文件,读取了工作表中指定列的数据,并将其打印到控制台
*
* @throws Exception 如果文件输入输出操作或Excel文件处理中发生错误
*/
public static void read() throws Exception {
// 创建FileInputStream以打开指定路径的Excel文件
FileInputStream fileInputStream = new FileInputStream(new File("E:\\test.xlsx"));
// 创建XSSFWorkbook对象以打开Excel工作簿
XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
// 获取名为"jacky"的工作表
XSSFSheet sheet = sheets.getSheet("jacky");
// 获取工作表中的最后一行号,用于遍历所有数据行
int lastRowNum = sheet.getLastRowNum();
// 获取第一行数据,用于后续的逻辑判断
XSSFRow row = sheet.getRow(1);
// 读取并存储第一行的指定列的字符串类型单元格值
String stringCellValue1 = row.getCell(1).getStringCellValue();
String stringCellValue2 = row.getCell(2).getStringCellValue();
// 打印读取到的字符串类型单元格值
System.out.println(stringCellValue1 + ":" + stringCellValue2);
// 遍历工作表中的所有数据行,从第二行开始,因为第一行通常为标题行
for (int i = 2; i <= lastRowNum; i++) {
// 获取当前行
row = sheet.getRow(i);
// 读取当前行的指定列的字符串类型单元格值
String stringCellValue = row.getCell(1).getStringCellValue();
// 读取当前行的指定列的数字类型单元格值
double numericCellValue = row.getCell(2).getNumericCellValue();
// 打印读取到的字符串类型和数字类型单元格值
System.out.println(stringCellValue + ":" + numericCellValue);
}
// 关闭FileInputStream和XSSFWorkbook以释放资源
fileInputStream.close();
sheets.close();
}
代码运行后控制台的输出结果如下: