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

Hutool - POI:让 Excel 与 Word 操作变得轻而易举

各位开发者们,在日常的 Java 开发工作里,处理 Excel 和 Word 文件是相当常见的需求。无论是从 Excel 里读取数据进行分析,还是将数据写入 Excel 生成报表,亦或是对 Word 文档进行内容编辑,传统的 Apache POI 库虽然功能强大,但使用起来往往比较复杂,代码量也不少。不过,有了 Hutool - POI 这个得力助手,一切都变得轻松起来了。它对 Apache POI 进行了封装,提供了简洁易用的 API,让我们可以更高效地操作 Excel 和 Word 文件。

一、Excel 操作:数据读写如此简单
1. 从 Excel 读取数据

假设我们有一个 Excel 文件,里面存储着员工信息,现在要把这些信息读取出来。

import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import java.util.List;
import java.util.Map;public class ExcelReadExample {public static void main(String[] args) {// 创建 Excel 读取器ExcelReader reader = ExcelUtil.getReader("employees.xlsx");// 读取数据,每行数据以 Map 形式存储List<Map<String, Object>> dataList = reader.readAll();for (Map<String, Object> row : dataList) {System.out.println("员工信息: " + row);}// 关闭读取器reader.close();}
}

在这段代码中,我们使用 ExcelUtil.getReader 方法创建了一个 Excel 读取器,指定要读取的 Excel 文件。然后调用 readAll 方法,将 Excel 中的所有数据读取出来,每行数据都以 Map 的形式存储,键是列名,值是单元格的值。最后遍历这个数据列表,输出每一行的员工信息。别忘了,使用完读取器后要调用 close 方法关闭它,释放资源。

2. 将数据写入 Excel

现在我们有一些员工数据,要把它们写入到一个新的 Excel 文件中。

import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class ExcelWriteExample {public static void main(String[] args) {// 准备数据List<Map<String, Object>> dataList = new ArrayList<>();Map<String, Object> row1 = new HashMap<>();row1.put("姓名", "张三");row1.put("年龄", 25);dataList.add(row1);Map<String, Object> row2 = new HashMap<>();row2.put("姓名", "李四");row2.put("年龄", 30);dataList.add(row2);// 创建 Excel 写入器ExcelWriter writer = ExcelUtil.getWriter("new_employees.xlsx");// 写入数据writer.write(dataList, true);// 关闭写入器writer.close();System.out.println("数据已成功写入 Excel 文件");}
}

这里,我们先创建了一个包含员工信息的 List<Map<String, Object>> 数据列表。然后使用 ExcelUtil.getWriter 方法创建一个 Excel 写入器,指定要写入的文件名称。调用 write 方法将数据写入到 Excel 中,第二个参数 true 表示是否写入表头。最后关闭写入器,数据就成功写入到新的 Excel 文件里了。

二、Word 操作:内容编辑得心应手
1. 创建并填充 Word 文档

我们来创建一个简单的 Word 文档,并且往里面添加一些文本内容。

import cn.hutool.poi.word.WordUtil;
import java.io.File;public class WordCreateExample {public static void main(String[] args) {String content = "这是一个使用 Hutool - POI 创建的 Word 文档示例。";// 创建 Word 文档并写入内容WordUtil.writeWord(content, new File("example.docx"));System.out.println("Word 文档创建成功");}
}

在这个例子中,我们定义了一段文本内容,然后使用 WordUtil.writeWord 方法将这段内容写入到一个新的 Word 文档中,指定文档的存储路径和文件名。运行代码后,一个包含指定内容的 Word 文档就创建好了。

2. 读取 Word 文档内容

如果我们有一个已有的 Word 文档,想要读取其中的内容,也很容易实现。

import cn.hutool.poi.word.WordUtil;
import java.io.File;public class WordReadExample {public static void main(String[] args) {// 读取 Word 文档内容String content = WordUtil.readWord(new File("example.docx"));System.out.println("Word 文档内容: " + content);}
}

使用 WordUtil.readWord 方法,传入要读取的 Word 文件对象,就能把文档中的内容读取出来并以字符串的形式返回,方便我们进一步处理。

三、注意事项

在使用 Hutool - POI 进行 Excel 和 Word 操作时,也有一些需要留意的地方。对于 Excel 操作,要注意数据类型的匹配,确保写入的数据类型和 Excel 单元格的类型兼容。同时,处理大量数据时,要考虑性能问题,可以采用分批读取和写入的方式。对于 Word 操作,不同版本的 Word 文档可能会有一些格式差异,在处理时要进行充分的测试。另外,操作文件时要确保文件的读写权限,避免出现权限不足的错误。

总之,Hutool - POI 为我们提供了一种简单、高效的方式来操作 Excel 和 Word 文件。无论是新手开发者还是有经验的老程序员,都能借助它快速实现文件处理的需求,提升开发效率,让我们把更多的精力放在业务逻辑上。大家不妨在自己的项目中试试,相信它会给你带来不错的体验!

相关文章:

Hutool - POI:让 Excel 与 Word 操作变得轻而易举

各位开发者们&#xff0c;在日常的 Java 开发工作里&#xff0c;处理 Excel 和 Word 文件是相当常见的需求。无论是从 Excel 里读取数据进行分析&#xff0c;还是将数据写入 Excel 生成报表&#xff0c;亦或是对 Word 文档进行内容编辑&#xff0c;传统的 Apache POI 库虽然功能…...

IDEAPyCharm安装ProxyAI(CodeGPT)插件连接DeepSeek-R1教程

背景&#xff1a;最近DeepSeek比较火嘛&#xff0c;然后在githup上也看到了GitHub Copilot&#xff0c;就想着现在AI的准确率已经可以提高工作效率了。所以从网上找了一些编程插件&#xff0c;发现Proxy支持的模型比较多&#xff0c;通用性和适配性比较好。所以本文记录一下pro…...

Iceberg Catalog

使用限制​ 支持 Iceberg V1/V2 表格式。支持 Position Delete。2.1.3 版本开始支持 Equality Delete。支持 Parquet 文件格式2.1.3 版本开始支持 ORC 文件格式。 创建 Catalog​ 基于 Hive Metastore 创建 Catalog​ 和 Hive Catalog 基本一致&#xff0c;这里仅给出简单示…...

2025年2月个人工作生活总结

本文为 2025年2月工作生活总结。 工作记录 AI浪潮 AI非常火&#xff0c;春节至今&#xff0c;到处充斥着大量和AI、DeepSeek有关的新闻。领导也一再强调要用AI&#xff0c;甚至纳入到新一年的考核里。再往上&#xff0c;大领导开会的新闻稿里也作出要求&#xff0c;不能停下脚…...

vscode java环境中文乱码的问题

先说我的结论&#xff1a; 由于我的系统是windows的&#xff0c;所以vscode使用的是默认gbk的编码进行的。 但是我的目的是全部都使用utf-8&#xff0c;因为我的程序始终是要去linux上去运行的&#xff0c;总不能在本地是好的&#xff0c;然后到服务器上就不行了吧&#xff0c;…...

Java数据结构第十五期:走进二叉树的奇妙世界(四)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、二叉树OJ练习题&#xff08;续&#xff09; 1.1. 二叉树的层序遍历 1.2. 二叉树的最近公共祖先 1.3. 从前序与中序遍历序列构造二叉树 1.4. 从中序与后序遍历序列构造二叉树 1.5. 根据二叉树创建…...

【MySQL】CAST()在MySQL中的用法以及其他常用的数据类型转换函数

1. cast() CAST() 在 MySQL 中用于将一个表达式的类型转换为另一个类型。这在处理不同类型的数据时非常有用&#xff0c;比如将字符串转换为数字&#xff0c;或者将浮点数转换为整数等。 1.1 CAST() 函数的基本语法 CAST() 函数的基本语法如下&#xff1a; CAST(expression…...

使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目

文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...

初出茅庐的小李博客之按键驱动库使用

驱动库介绍 源码地址&#xff1a;https://github.com/jiejieTop/ButtonDrive 使用只需3步&#xff0c;创建按键&#xff0c;按键事件与回调处理函数链接映射&#xff0c;周期检查按键&#xff0c;支持单双击、连按、长按&#xff1b;采用回调处理按键事件&#xff08;自定义消…...

如何调试Linux内核?

通过创建一个最小的根文件系统&#xff0c;并使用QEMU和GDB进行调试。 1.准备工作环境 确保系统上安装了所有必要的工具和依赖项。 sudo apt-get update //更新一下软件包 sudo apt-get install build-essential git libncurses-dev bison flex libssl-dev qemu-system-x…...

ECharts组件封装教程:Vue3中的实践与探索

在日常的前端开发中,ECharts 作为一款强大且易用的图表库,被广泛应用于数据可视化场景。为了更好地在 Vue3 项目中复用 ECharts 功能,我们可以将其封装成一个组件。本文将带大家一步步实现 ECharts 的 Vue3 组件封装,并演示如何在父组件中调用和使用。 一、封装 ECharts 组…...

NAT 代理服务 内网穿透

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; NAT 技术背景二&#xff1a;&#x1f525; NAT IP 转换过程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服务器&#x1f98b; 正向…...

CAN硬件协议详解

一、基本理论&#xff1a; 1、CAN的总线结构&#xff1a; CAN总线 网络结构 有 闭环和开环 两种形式&#xff1b;无论实际的网络多复杂&#xff0c;都离不开这两种基本结构。 闭环结构的CAN总线网络&#xff0c;总线的两端各并联一个120Ω的电阻&#xff0c;两…...

网络安全等级保护:网络安全等级保护基本技术

下面我们概括性探讨一下等级保护用到的一些技术&#xff0c;有关这些技术的每一个方面的每一个部分都可以是一部大块头&#xff0c;甚至一部大块头都无法介绍清楚&#xff0c;需要系列性的书籍去展开&#xff0c;所以这里也只能做到抛砖而已。期望起到抛砖引玉的作用&#xff0…...

信刻光盘安全隔离与信息交换系统让“数据摆渡”安全高效

随着数据传输、存储及信息技术的飞速发展&#xff0c;信息安全保护已成为重中之重。各安全领域对跨网数据交互的需求日益迫切&#xff0c;数据传输的安全可靠性成为不可忽视的关键。为满足业务需求并遵守保密规范&#xff0c;针对于涉及重要秘密信息&#xff0c;需做到安全的物…...

数据结构课程设计(java实现)---九宫格游戏,也称幻方

【问题描述】 九宫格&#xff0c;一款数字游戏&#xff0c;起源于河图洛书&#xff0c;与洛书是中国古代流传下来的两幅神秘图案&#xff0c;历来被认为是河洛文化的滥觞&#xff0c;中华文明的源头&#xff0c;被誉为"宇宙魔方"。九宫格游戏对人们的思维锻炼有着极大…...

[思考记录]AI时代下,悄然的改变

尝试用 xAI-Grok 去了解DS开源周的信息&#xff0c;有那么点被Grok的输出惊艳到。“请你以技术编辑的角色&#xff0c;重点参考官方文档&#xff0c;介绍DeepSeek开源周的内容&#xff0c;写一篇技术分享文章。”&#xff0c;得到的文字看起来很是舒服&#xff0c;内容靠谱、结…...

JAVA笔记【一】

现实 &#xff08;抽象&#xff09; 类 &#xff08;创建&#xff09; 对象 特点&#xff1a; 1.面向对象 2.跨平台 3.安全性 4.多线程 java程序基本结构 1. java源代码文件实际是普通的文本文件&#xff0c;源代码文件必须是.java扩展名&#xff0c;且必须小写 2. …...

[Java基础] 常用注解

文章目录 1. 元注解2. 非元注解2.1 常用JDK自带注解2.2 常用Spring相关注解2.2.1 在Spring框架中&#xff0c;注解用于简化配置和增强代码的可读性。以下是常用的Spring注解的一部分2.2.2 针对controller的相关注解2.2.3 AOP相关注解2.2.4 Enable系列注解 2.3 常用Lombok注解 1…...

uvm中的run_test作用

在SystemVerilog和UVM验证环境中&#xff0c;run_test() 是启动UVM仿真流程的核心函数。它负责初始化UVM框架、创建测试用例实例&#xff0c;并触发UVM的Phase机制来执行验证环境的构建和运行 1. run_test() 的作用 run_test() 是UVM提供的内置函数&#xff0c;定义在UVM库中…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...