当前位置: 首页 > news >正文

Apache POI—读写Office格式文件

Apache POI 是一个开源的 Java 库,用于读写 Microsoft Office 格式的文件,主要包括 Excel、Word 和 PowerPoint 等文档。POI 对 Excel 文件的支持最为完善,通过 POI 可以方便地进行 Excel 文件的创建、编辑、读取等操作。

1. Apache POI 简介

Apache POI(Poor Obfuscation Implementation)是专为 Java 提供的 Office 文档处理工具。它包含多个子组件:

  • HSSF(Horrible Spreadsheet Format):用于处理 Excel 97-2003(.xls)格式的文件。
  • XSSF(XML Spreadsheet Format):用于处理 Excel 2007+(.xlsx)格式的文件。
  • HWPF(Horrible Word Processor Format):用于处理 Word 97-2003(.doc)格式的文件。
  • XWPF:用于处理 Word 2007+(.docx)格式的文件。
  • HSLFXSLF:用于处理 PowerPoint 文件。
  • SXSSF(Streaming XSSF):基于 XSSF 的流式 API,适合处理超大数据量的 Excel 文件。

2. 引入 Apache POI 依赖

在 Maven 项目中添加 POI 的依赖,通常只需要引入 Excel 相关的 poi-ooxml 包。

<dependencies><!-- POI 基础包 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version></dependency>
</dependencies>

3. 基本使用方法

3.1 创建 Excel 文件

import org.apache.poi.ss.usermodel.*;           // 引入通用的 POI Excel 操作类
import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 引入 XSSFWorkbook 类用于创建 .xlsx 格式的工作簿import java.io.FileOutputStream;public class ExcelWriter {public static void main(String[] args) {// 创建一个新的 Excel 工作簿,使用 XSSFWorkbook 创建 .xlsx 格式文件Workbook workbook = new XSSFWorkbook();// 创建一个名为 "Sheet1" 的工作表Sheet sheet = workbook.createSheet("Sheet1");// 在工作表中创建第一行 (索引为 0) 并在该行中创建一个单元格 (索引为 0)Row row = sheet.createRow(0);         // 创建第一行Cell cell = row.createCell(0);        // 在第一行创建第一个单元格// 向单元格中写入数据 "Hello, POI!"cell.setCellValue("Hello, POI!");     // 设置单元格的值// 将工作簿内容输出到指定文件 "example.xlsx" 中try (FileOutputStream fos = new FileOutputStream("example.xlsx")) {workbook.write(fos);              // 将工作簿写入文件输出流} catch (Exception e) {e.printStackTrace();              // 捕获并打印异常,避免写入失败时程序崩溃}// 关闭工作簿以释放资源try {workbook.close();                 // 关闭工作簿} catch (Exception e) {e.printStackTrace();              // 捕获并打印异常,避免资源未释放时程序崩溃}}
}

3.2 读取 Excel 文件

import org.apache.poi.ss.usermodel.*;          // 导入 POI 通用 Excel 操作类
import java.io.FileInputStream;public class ExcelReader {public static void main(String[] args) {// 尝试打开文件输入流读取指定的 Excel 文件try (FileInputStream fis = new FileInputStream("example.xlsx");Workbook workbook = new XSSFWorkbook(fis)) {   // 使用 XSSFWorkbook 读取 .xlsx 文件格式的工作簿// 获取 Excel 文件中的第一个工作表,索引从 0 开始Sheet sheet = workbook.getSheetAt(0);// 遍历工作表中的每一行for (Row row : sheet) {// 遍历每一行中的每一个单元格for (Cell cell : row) {// 根据单元格的数据类型读取并输出相应的数据switch (cell.getCellType()) {case STRING:                         // 若单元格为字符串类型System.out.print(cell.getStringCellValue() + "\t"); // 输出字符串值break;case NUMERIC:                        // 若单元格为数字类型System.out.print(cell.getNumericCellValue() + "\t"); // 输出数值break;default:                             // 其他未知类型System.out.print("未知数据类型\t"); // 输出未知类型提示break;}}System.out.println();                       // 每读取一行的数据后换行输出}} catch (Exception e) {e.printStackTrace();                            // 捕获并打印异常信息}}
}

4. 常用操作

4.1 设置单元格样式

// 创建单元格样式对象,用于设置单元格的样式
CellStyle style = workbook.createCellStyle();// 创建字体对象,用于设置单元格字体的样式
Font font = workbook.createFont();
font.setBold(true);                     // 设置字体加粗
font.setFontHeightInPoints((short) 14); // 设置字体大小为 14 磅// 将字体样式应用到单元格样式中
style.setFont(font);// 将样式应用到指定的单元格
cell.setCellStyle(style);               // 设置单元格样式

4.2 合并单元格

import org.apache.poi.ss.util.CellRangeAddress;sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); // 合并第 0-1 行,第 0-2 列

4.3 写入日期数据

// 创建一个新的单元格用于存储日期数据,位于当前行的第 2 列(索引 1)
Cell dateCell = row.createCell(1);
dateCell.setCellValue(new Date()); // 设置当前日期作为单元格的值// 创建单元格样式对象,用于设置日期格式
CellStyle dateStyle = workbook.createCellStyle();// 设置日期格式为 "yyyy-MM-dd"
// 使用 workbook 的 CreationHelper 创建 DataFormat 对象,并应用自定义格式
dateStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd"));// 将样式应用到日期单元格,使其显示为指定的日期格式
dateCell.setCellStyle(dateStyle);

4.4 公式计算

Cell formulaCell = row.createCell(2);
formulaCell.setCellFormula("SUM(A1:A10)"); // 设置单元格为求和公式

5. 处理大数据量 Excel 文件

当数据量较大时,SXSSF(Streaming Usermodel API) 是处理大文件的更佳选择。SXSSF 是基于 XSSF 的流式写入方式,适合数据量大的情况下避免内存溢出。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;public class LargeExcelWriter {public static void main(String[] args) {Workbook workbook = new SXSSFWorkbook();Sheet sheet = workbook.createSheet("Large Data");for (int i = 0; i < 100000; i++) {Row row = sheet.createRow(i);for (int j = 0; j < 10; j++) {Cell cell = row.createCell(j);cell.setCellValue("Data " + i + "," + j);}}try (FileOutputStream fos = new FileOutputStream("large_data.xlsx")) {workbook.write(fos);} catch (Exception e) {e.printStackTrace();}((SXSSFWorkbook) workbook).dispose(); // 清除临时文件,释放内存}
}

6. 总结

Apache POI 是处理 Excel 文件的强大工具,通过 POI 可以实现 Excel 的创建、读取、编辑、写入等操作。小数据量使用 XSSFWorkbook,大数据量使用 SXSSFWorkbook。掌握基本的单元格操作、样式设置、数据格式和公式应用,可以满足绝大多数的 Excel 操作需求。

http://www.lryc.cn/news/472492.html

相关文章:

  • 3162. 优质数对的总数 I
  • (五)Web前端开发进阶2——AJAX
  • 数据结构(java)——数组的构建和插入
  • AI-CNN-验证码识别
  • React 前端框架全面教程:从入门到进阶
  • 重拾CSS,前端样式精读-布局(弹性盒)
  • Python 使用 LSTM 进行情感分析:处理文本序列数据的指南
  • MySQL:INSERT IGNORE 语句的用法
  • java模拟进程调度
  • 大模型AI在教育领域有哪些创业机会?
  • 网页上视频没有提供下载权限怎么办?
  • 【去哪里找开源商城项目】
  • ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)
  • vue添加省市区
  • 运维监控丨16条常用的Kafka看板监控配置与告警规则
  • ECharts饼图,配置标注示例
  • 【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)
  • LN 在 LLMs 中的不同位置 有什么区别么
  • 【代码随想录Day57】图论Part08
  • 记录一次mmpretrain训练数据并转onnx推理
  • shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
  • telnet 密码模式 访问路由器
  • 文心一言 VS 讯飞星火 VS chatgpt (380)-- 算法导论24.4 12题
  • Unity自定义数组在Inspector窗口的显示方式
  • ERC论文阅读(03)--SPCL论文阅读笔记(2024-10-29)
  • Straightforward Layer-wise Pruning for More Efficient Visual Adaptation
  • 喜讯 | 创邻科技杭州电子科技大学联合实验室揭牌成立!
  • 海外媒体发稿:如何打造媒体发稿策略
  • PyTorch模型保存与加载
  • CH569开发前的测试