Apache POI 是一个处理 Microsoft Office 各种文件格式的开源项目
1. 核心定义与应用场景
-
定义:它允许开发人员通过 Java 代码创建、修改或读取 Excel 电子表格。
-
常见场景:
- 数据导出:如银行网银系统导出交易明细、业务系统导出运营报表。
- 数据导入:将 Excel 中的批量业务数据(如商品信息、员工名单)一次性录入数据库。
2. 核心对象(API)
在 POI 中,Excel 的组成部分被抽象为以下四个核心类:
XSSFWorkbook:代表一个 Excel 工作簿(整个文件对象),既可以在内存中创建新文件,也可以读取现有文件。XSSFSheet:代表工作簿中的一个 Sheet 页。XSSFRow:代表工作表中的一 行。XSSFCell:代表行中的一个 单元格。
3. 操作逻辑
在使用 POI 时,无论是读还是写,行和单元格的索引都是从 0 开始的(即第 1 行对应索引 0)。
写入 Excel 的步骤:
- 在内存中创建一个
XSSFWorkbook对象。 - 调用
createSheet创建工作表。 - 调用
createRow在指定索引处创建行。 - 通过
createCell创建单元格,并利用setCellValue方法设置数据内容。 - 通过
FileOutputStream输出流将内存中的对象写入磁盘文件。
读取 Excel 的步骤:
- 通过
FileInputStream输入流读取指定的 Excel 文件。 - 根据流创建
XSSFWorkbook对象。 - 通过
getSheetAt(0)获取第一个 Sheet 页。 - 利用
getLastRowNum获取最后一行的行号,并通过循环遍历每一行 (getRow) 和每一个单元格 (getCell)。 - 使用
getStringCellValue等方法提取单元格中的原始数据。
4. 项目实战应用:导出运营报表
在 Day 12 的任务中,Apache POI 被用于导出最近 30 天的运营数据 Excel 报表。
- 实现思路:后端并不是从零开始画表,而是先通过输入流读取一个预先设计好的模板文件(
resources/template/运营数据报表模板.xlsx)。 - 数据填充:查询最近 30 天的概览数据和明细数据后,通过
sheet.getRow(index).getCell(index)定位到模板中的空白格,将动态数据填入。 - 浏览器下载:最终通过
response.getOutputStream()将处理好的文件流回传给浏览器,实现“点击即可下载”的功能。
类比理解: Apache POI 就像是一个“代笔会计” 。 当你需要写报表时(写入),你给会计一叠白纸(Workbook),告诉他去哪一页(Sheet)、哪一行(Row)、哪一格(Cell)填上什么数字。 当你需要对账时(读取),他会翻开已有的账本,按照你给的坐标,把那一格里的数字读出来告诉你。而在 Day 12 的报表导出中,你还给了他一张印好格子的“空白申请表”(模板),他只需要根据你的账本(数据库查询结果),把对应的数字填进表格里,最后复印一份交给老板(用户)即可。