初识Apache POI

6 阅读3分钟

Apache POI 是一个处理 Microsoft Office 各种文件格式的开源项目

1. 核心定义与应用场景

  • 定义:它允许开发人员通过 Java 代码创建、修改或读取 Excel 电子表格。

  • 常见场景

    • 数据导出:如银行网银系统导出交易明细、业务系统导出运营报表。
    • 数据导入:将 Excel 中的批量业务数据(如商品信息、员工名单)一次性录入数据库。

2. 核心对象(API)

在 POI 中,Excel 的组成部分被抽象为以下四个核心类:

  • XSSFWorkbook:代表一个 Excel 工作簿(整个文件对象),既可以在内存中创建新文件,也可以读取现有文件。
  • XSSFSheet:代表工作簿中的一个 Sheet 页
  • XSSFRow:代表工作表中的一
  • XSSFCell:代表行中的一个 单元格

3. 操作逻辑

在使用 POI 时,无论是读还是写,行和单元格的索引都是从 0 开始的(即第 1 行对应索引 0)。

写入 Excel 的步骤:

  1. 在内存中创建一个 XSSFWorkbook 对象。
  2. 调用 createSheet 创建工作表。
  3. 调用 createRow 在指定索引处创建行。
  4. 通过 createCell 创建单元格,并利用 setCellValue 方法设置数据内容。
  5. 通过 FileOutputStream 输出流将内存中的对象写入磁盘文件。

读取 Excel 的步骤:

  1. 通过 FileInputStream 输入流读取指定的 Excel 文件。
  2. 根据流创建 XSSFWorkbook 对象。
  3. 通过 getSheetAt(0) 获取第一个 Sheet 页。
  4. 利用 getLastRowNum 获取最后一行的行号,并通过循环遍历每一行 (getRow) 和每一个单元格 (getCell)。
  5. 使用 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 的报表导出中,你还给了他一张印好格子的“空白申请表”(模板),他只需要根据你的账本(数据库查询结果),把对应的数字填进表格里,最后复印一份交给老板(用户)即可。