当前位置: 首页 > 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 操作需求。

相关文章:

Apache POI—读写Office格式文件

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

3162. 优质数对的总数 I

3162. 优质数对的总数 I 题目链接&#xff1a;3162. 优质数对的总数 I 代码如下&#xff1a; class Solution { public:int numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k){int res 0;for (int i 0; i < nums1.size(); i){for (int…...

(五)Web前端开发进阶2——AJAX

目录 2.Axios库 3.认识URL 4.Axios常用请求方法 5.HTTP协议——请求报文/响应报文 6.前后端分离开发 7.Element组件库 1.Ajax概述 AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。简单点说&#xff0c;就是使用XMLHttpRequest 对象与服务器通信。它可…...

数据结构(java)——数组的构建和插入

数组&#xff1a;地址连续&#xff0c;可以直接通过下标获取数组中的内容。&#xff08;下标从0开始&#xff09; 新建的数组都有默认值 //创建数组//Java是强类型 数组必须声明类型//以下是三种创建数组的方式 int[] arr {2,23,55,12,34,53};int[] brrnew int[5];int[] crrn…...

AI-CNN-验证码识别

1 需求 GitHub - xhh890921/cnn-captcha-pytorch: 小黑黑讲AI&#xff0c;AI实战项目《验证码识别》 2 接口 3 示例 config.json {"train_data_path": "./data/train-digit/","test_data_path": "./data/test-digit/","train_…...

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程&#xff1a;从入门到进阶 引言 在现代前端开发中&#xff0c;React 作为一款流行的 JavaScript 库&#xff0c;以其组件化、声明式的特性和强大的生态系统&#xff0c;成为了开发者的首选。无论是构建单页应用&#xff08;SPA&#xff09;还是复杂的用…...

重拾CSS,前端样式精读-布局(弹性盒)

前言 本文收录于CSS系列文章中&#xff0c;欢迎阅读指正 接着上篇布局文章继续介绍当前流行的布局方式 Flexbox布局 长久以来&#xff0c;CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使&#xff0c;但是在某些方面它…...

Python 使用 LSTM 进行情感分析:处理文本序列数据的指南

使用 LSTM 进行情感分析&#xff1a;处理文本序列数据的指南 长短期记忆网络&#xff08;LSTM&#xff09;是一种适合处理序列数据的深度学习模型&#xff0c;广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…...

MySQL:INSERT IGNORE 语句的用法

INSERT IGNORE 语句 在MySQL中&#xff0c;INSERT IGNORE 语句用于尝试向表中插入一行数据&#xff0c;但如果插入操作会导致表中唯一索引或主键的冲突&#xff0c;MySQL将忽略该操作并继续执行&#xff0c;而不会引发错误。这意味着&#xff0c;如果表中已经存在具有相同唯一…...

java模拟进程调度

先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…...

大模型AI在教育领域有哪些创业机会?

大模型AI在教育领域有很多创业机会&#xff0c;尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会&#xff1a; 个性化学习平台 学习路径定制&#xff1a;根据学生的学习数据与兴趣&#xff0c;为他们设计个性化的学习路径&#xff0c;提供适合的课…...

网页上视频没有提供下载权限怎么办?

以腾讯会议录屏没有提供下载权限为例&#xff0c;该怎么办呢&#xff1f; 最好的办法就是找到管理员&#xff0c;开启下载权限。如果找不到呢&#xff0c;那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”&#xff0c;选择“视频下载Pro” 3.点击“…...

【去哪里找开源商城项目】

有很多途径可以找到开源项目&#xff0c;以下是一些常用的方法&#xff1a; 开源代码托管平台&#xff1a;许多开源项目都托管在平台上&#xff0c;例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目&#xff0c;搜索关键词&#xff0c;查看项目的星级和贡献者数量等…...

ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)

第二届网络、通信与智能计算国际会议&#xff08;NCIC 2024&#xff09;将于2024年11月22-25日在北京信息科技大学召开&#xff0c;聚焦网络、通信与智能计算&#xff0c;欢迎国内外学者投稿交流&#xff0c;录用文章将在Springer出版&#xff0c;并提交EI等检索。 NCIC 2024&a…...

vue添加省市区

主要参考“element”框架&#xff1a;Element - The worlds most popular Vue UI framework <div class"block"><span class"demonstration">默认 click 触发子菜单</span><el-cascaderv-model"value":options"optio…...

运维监控丨16条常用的Kafka看板监控配置与告警规则

本期我们针对企业运维监控的场景&#xff0c;介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求&#xff0c;灵活调整和扩展这些监控配置及告警规则。在实际应用场景中&#xff0c;需要综合运用多种监控工具&#xff08;例如Prometheus、Grafana、Zabbix等&#…...

ECharts饼图,配置标注示例

const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…...

【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)

一、背景意义 在信息时代&#xff0c;数据的收集和分析技术得到了飞速发展。深度学习算法的出现&#xff0c;为处理和分析这些复杂的鱼类数据集提供了强大的工具。深度学习具有强大的模式识别和特征提取能力&#xff0c;能够从海量的数据中自动学习和发现规律&#xff0c;为鱼…...

LN 在 LLMs 中的不同位置 有什么区别么

Layer Normalization&#xff08;LN&#xff09;是一种在深度学习中用于稳定和加速神经网络训练的归一化技术。它通过对单个样本的所有激活进行归一化来工作&#xff0c;与Batch Normalization&#xff08;BN&#xff09;不同&#xff0c;BN是对一个mini-batch中的所有样本的激…...

【代码随想录Day57】图论Part08

拓扑排序精讲 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取文件数量 n 和依赖关系数量 mint n scanner.nextInt();int m scanner.nextInt()…...

WelsonJS:基于Windows原生WSH的现代JavaScript桌面应用开发框架

1. 项目概述&#xff1a;WelsonJS&#xff0c;一个被低估的Windows原生JavaScript框架如果你是一名Windows平台的开发者&#xff0c;或者经常需要处理一些自动化、脚本任务&#xff0c;你可能对Node.js、Electron甚至PowerShell都很熟悉。但今天我想聊一个有点“复古”却又极其…...

85个实用UserScript脚本:提升浏览器效率与网页交互体验

1. 项目概述与核心价值如果你和我一样&#xff0c;是个重度浏览器用户&#xff0c;每天要在各种网页上处理信息、查找资料&#xff0c;那你肯定也遇到过这些烦心事&#xff1a;想快速回到页面顶部&#xff0c;得疯狂滚鼠标滚轮&#xff1b;想复制个链接&#xff0c;结果网页自作…...

AI浪潮下光纤需求爆发,康宁如何从玻璃厂变身光纤之王?

AI光纤需求爆发&#xff0c;英伟达加速布局根据CRU&#xff0c;AI数据中心的光纤需求一年增长75.9%&#xff0c;供需缺口从6%撕开到15%&#xff0c;光纤价格更是在数月间涨超3倍。产能跟不上了&#xff0c;这就是为什么英伟达要投资康宁并加速光纤产能扩张。两个月前&#xff0…...

Taotoken用量看板如何帮助团队精细化管控API成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助团队精细化管控API成本 对于依赖大模型API进行开发的团队而言&#xff0c;成本控制是一个持续存在的挑战…...

31_AI短片实战第四弹:主观视角空间控制与分屏快速剪辑的AI生成策略(附提示词)

文章目录 一、第九镜:前方巨大峡谷——主观视角的空间精确控制 镜头设定 为什么这个镜头很难 迭代修正全记录 主观视角生成黄金法则 二、第十分镜:快速剪辑风格分屏——怪兽逼近与油门踩到底 镜头设定 尝试一次性生成 最终方案:拆分生成,后期合成 什么时候应该“拆开做”?…...

2026届必备的十大降重复率网站实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 现在市面上存在的AI论文网站&#xff0c;主要具备文献检索功能、内容生成功能、格式校对功能…...

酷安UWP桌面版:在Windows上体验酷安社区的最佳指南

酷安UWP桌面版&#xff1a;在Windows上体验酷安社区的最佳指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 还在为手机屏幕太小而烦恼吗&#xff1f;想要在大屏幕上舒适浏览酷安社区内…...

在RK3399上跑通ORB-SLAM2和VINS-MONO,我踩过的那些坑(含RealSense D435i兼容性测试)

在RK3399上部署ORB-SLAM2与VINS-MONO的避坑实战指南 引言 当视觉SLAM算法遇上嵌入式平台&#xff0c;总会碰撞出意想不到的火花。作为一名长期在边缘计算设备上折腾SLAM算法的开发者&#xff0c;我最近在RK3399这块性能强劲的ARM开发板上部署ORB-SLAM2和VINS-MONO时&#xff0c…...

C语言老鸟的私藏:Doxygen注释模板这样写,团队协作效率翻倍

C语言团队协作的Doxygen注释实战指南&#xff1a;从规范到自动化 在嵌入式开发领域&#xff0c;代码注释的混乱程度往往与团队规模成正比。当项目从单人开发扩展到5人以上的协作时&#xff0c;你会发现&#xff1a;同样的功能模块&#xff0c;A工程师用//写单行注释&#xff0…...

如何高效管理九大网盘文件:LinkSwift直链下载助手完整指南

如何高效管理九大网盘文件&#xff1a;LinkSwift直链下载助手完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...