当前位置: 首页 > 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库中…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...