1.Apache POI简单介绍
Apache POI是Apache软件基金会的开源项目,提供了Java操作Microsoft Office格式文件的API,支持Excel、Word、PowerPoint等格式的读写操作。其核心优势在于:
- 跨平台兼容性:纯Java实现,可在任何支持Java的环境中运行
- 格式全面支持:覆盖OLE2格式(.xls、.doc)和OOXML格式(.xlsx、.docx)
- 活跃的社区维护:2025年4月发布的最新稳定版本5.4.1,持续修复安全漏洞和性能优化
一般情况下,都是使用来读写Excel文件。
2.实际应用场景
- 数据导出:将数据库查询结果导出为Excel报表(店铺经营报表,各种业务系统的导出报表)
- 批量导入:解析用户上传的Excel数据并入库(批量导入各种业务数据)
- 模板生成:基于固定模板自动填充数据生成个性化文档(根据个性化模板模块进行读写操作)
3.环境搭建,如何简单使用
Apache POI既可以将数据写入Excel文件,也可以读取Excel文件中的数据,接下来分别进行实现。
3.1导入Apache POI的maven坐标:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
特别说明:
- POI 4.0.1及以上需要Java 8+环境
- .xls (Excel 97-2003):需引入poi模块
- .xlsx (Excel 2007+):需额外引入poi-ooxml模块
3.2 对于Excel文件的读写操作实现
3.2.1创建XLSX文件(.xlsx格式)(也可以说是写Excel文件)
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class CreateExcel {
public static void main(String[] args) {
try (Workbook workbook = new XSSFWorkbook()) {
// 创建工作表
Sheet sheet = workbook.createSheet("员工信息表");
// 创建标题行
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("工号");
headerRow.createCell(1).setCellValue("姓名");
headerRow.createCell(2).setCellValue("部门");
// 填充数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("EMP001");
dataRow.createCell(1).setCellValue("张三");
dataRow.createCell(2).setCellValue("技术部");
// 自动调整列宽
for (int i = 0; i < 3; i++) {
sheet.autoSizeColumn(i);
}
// 写入文件
try (FileOutputStream fos = new FileOutputStream("员工信息.xlsx")) {
workbook.write(fos);
}
System.out.println("Excel文件创建成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个功能就是写一个名为员工信息.xlsx的Excel表
3.2.2读取XLSX文件
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcel {
public static void main(String[] args) {
try (Workbook workbook = new XSSFWorkbook(new FileInputStream("员工信息.xlsx"))) {
Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
// 遍历行
for (Row row : sheet) {
// 遍历单元格
for (Cell cell : row) {
String value = switch (cell.getCellType()) {
case STRING -> cell.getStringCellValue();
case NUMERIC -> String.valueOf(cell.getNumericCellValue());
case BOOLEAN -> String.valueOf(cell.getBooleanCellValue());
default -> "";
};
System.out.print(value + "\t");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个功能就是读取员工信息.xlsx表中的信息,输出在控制台上。
4.注意事项
- 版本选择:生产环境建议使用5.4.1及以上版本,修复了多个安全漏洞
- 内存管理:处理超过10万行数据时,优先使用SXSSF而非XSSF
- 异常处理:文件操作需完善try-with-resources语句,确保资源正确释放
- 格式兼容性:.xls格式(HSSF)最大支持65536行,.xlsx(XSSF)支持1048576行
5.总结
Apache POI作为Java操作Office文档的事实标准库,提供了强大而灵活的API。本文介绍的基础操作足以满足日常开发需求,更多高级功能如图表生成、批注处理等可参考官方文档进一步探索。建议结合实际项目需求,合理选择POI模块和版本,充分发挥其在数据处理和文档生成中的价值。

4352

被折叠的 条评论
为什么被折叠?



