word导入导出-Apache POI 和 Poi-tl
word 文件读取
使用Apache POI Word 进行读取文件
使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本
Apache POI Word 说明文档:Apache POI Word 说明文档
maven 解决依赖冲突教程:https://www.cnblogs.com/shangxiaofei/p/17662176.html
1:导包
<!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><!--读取doc文件--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.2</version></dependency>
2:读取doc和docx文件的工具类
package com.wkl.testdemo.word;import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;/*** 读取word工具类*/
public class ReadWordUtil {public static String readWord(InputStream inputStream, String suffix) throws Exception{String buffer = "";try {if ("doc".equals(suffix)) {HWPFDocument document = new HWPFDocument(inputStream);WordExtractor extractor = new WordExtractor(document);buffer = extractor.getText();String[] paragraphText = extractor.getParagraphText();//解析段落for (String s : paragraphText) {System.out.println(s);}extractor.close();document.close();} else if ("docx".equals(suffix)) {XWPFDocument doc = new XWPFDocument(inputStream);XWPFWordExtractor extractor = new XWPFWordExtractor(doc);buffer = extractor.getText();//解析段落List<XWPFParagraph> paragraphs = doc.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {String text1 = paragraph.getText();System.out.println(text1);}extractor.close();doc.close();}return buffer;} catch (Exception e) {throw e;}}public static void main(String[] args) throws Exception {String pathdocx = "C:\\Users\\wenge\\Desktop\\新建 DOCX 文档.docx";readWord(new FileInputStream(new File(pathdocx)),"docx");String pathdoc = "C:\\Users\\wenge\\Desktop\\新建 DOC 文档.doc";readWord(new FileInputStream(new File(pathdoc)),"doc");}
}
导出word文档-Poi-tl
1:Poi-tl介绍
poi-tl是一个基于Apache POI的Java库,用于操作Microsoft Office文档,包括Word文档(.docx)、Excel电子表格(.xlsx)和PowerPoint演示文稿(.pptx)。它提供了一组简单易用的API,使开发人员能够轻松地创建、读取和修改Office文档。
poi-tl的主要特点如下:
-
简单易用:poi-tl提供了一组简单易用的API,使开发人员能够快速上手并进行Office文档的操作。它提供了丰富的方法和属性,以满足不同的需求。
-
支持多种文档格式:poi-tl支持多种常见的Office文档格式,包括Word文档(.docx)、Excel电子表格(.xlsx)和PowerPoint演示文稿(.pptx)。开发人员可以使用poi-tl来创建、读取和修改这些文档。
-
功能丰富:poi-tl提供了许多有用的功能,如创建和修改文档的样式、添加和删除文本、插入和删除图片、创建和修改表格、添加和删除行列等。它还支持合并单元格、设置字体样式和颜色、设置边框和背景颜色等高级功能。
-
支持模板引擎:poi-tl支持使用模板引擎来生成Office文档。开发人员可以使用模板引擎来定义文档的结构和样式,并使用poi-tl来填充数据。这样可以实现文档的动态生成,使开发人员能够更灵活地生成各种类型的文档。
-
支持国际化:poi-tl支持国际化,可以根据不同的语言和地区生成相应的文档。开发人员可以使用poi-tl提供的API来设置文档的语言、日期格式、货币格式等,以满足不同国家和地区的需求。
-
开源免费:poi-tl是一个开源的Java库,使用Apache License 2.0许可证。这意味着开发人员可以免费使用和修改poi-tl,并将其用于商业和非商业项目。
综上所述,poi-tl是一个功能强大且易于使用的Java库,用于操作Microsoft Office文档。它提供了丰富的API和功能,使开发人员能够轻松地创建、读取和修改Office文档。无论是生成报告、导出数据还是进行数据分析,poi-tl都是一个理想的选择
2:Poi-tl和其他模板引擎对比

其中:
poi-tl官网地址:https://deepoove.com/poi-tl/
Apache POI Word 说明文档:Apache POI Word 说明文档
3:Poi-tl 功能列表

4:导包
看poi-tl 官网,有版本建议

<!--poi word--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version></dependency><!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><!--读取doc文件--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.2</version></dependency>
5:导出文件测试-helloworld
1:生成一个模板.docx

2:程序测试
package com.wkl.testdemo.word;import com.deepoove.poi.XWPFTemplate;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** @author wangkanglu* @version 1.0* @description* @date 2023-12-20 15:53*/
public class WriteWordUtil {public static void main(String[] args) {String path = "C:\\Users\\Desktop\\模板.docx";Map<String,String> data = new HashMap<>();data.put("title","标题1111");data.put("publishTime","2023-12-20 13:12:12");data.put("content","内容");try {toword(data,path,"C:\\Users\\Desktop\\模板1.docx");} catch (IOException e) {throw new RuntimeException(e);}}/*** 生成word工具类* @param datas 数据* @param filePath 模板地址* @param descpath 输出地址* @return 返回生成文件路径* @throws IOException*/public static String toword(Map datas, String filePath, String descpath) throws IOException {String outPath = descpath;XWPFTemplate template = XWPFTemplate.compile(filePath).render(datas);FileOutputStream out = new FileOutputStream(outPath);template.write(out);template.close();return descpath;}
}
3:结果:

6:复杂使用-增加文件批注
package com.wkl.testdemo.word;import java.io.IOException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;import org.apache.poi.util.LocaleUtil;import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Documents;
import com.deepoove.poi.data.Documents.DocumentBuilder;
import com.deepoove.poi.data.ParagraphRenderData;
import com.deepoove.poi.data.Paragraphs;
import com.deepoove.poi.data.Pictures;
import com.deepoove.poi.data.TableRenderData;
import com.deepoove.poi.data.Tables;
import com.deepoove.poi.data.Texts;
import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.plugin.comment.CommentRenderData;
import com.deepoove.poi.plugin.comment.CommentRenderPolicy;
import com.deepoove.poi.plugin.comment.Comments;
import com.deepoove.poi.plugin.comment.Comments.CommentBuilder;public class CommentRenderPolicyTest {public static void main(String[] args) {try {testCommentExample();} catch (IOException e) {throw new RuntimeException(e);}}public static void testCommentExample() throws IOException {// commentCommentRenderData comment0 = newCommentBuilder().addText(Texts.of("咏鹅").fontSize(20).bold().create()).comment(Documents.of().addParagraph(Paragraphs.of(Pictures.ofLocal("D:\\Pictures\\002KoyJzly1hix2zhdr2qj60sq0sq0uu02.jpg").create()).create()).create()).create();CommentRenderData comment1 = newCommentBuilder().addText("骆宾王").comment("骆宾王作为“初唐四杰”之一,对荡涤六朝文学颓波,革新初唐浮靡诗风。他一生著作颇丰,是一个才华横溢的诗人。").create();CommentRenderData comment2 = newCommentBuilder().addText("曲项").comment("弯着脖子").create();CommentRenderData comment3 = newCommentBuilder().addText("拨").comment("划动").create();// document DocumentBuilder documentBuilder = Documents.of().addParagraph(Paragraphs.of().addComment(comment0).center().create());documentBuilder.addParagraph(Paragraphs.of().addComment(comment1).center().create());documentBuilder.addParagraph(Paragraphs.of("鹅,鹅,鹅,").addComment(comment2).addText("向天歌。").center().create());documentBuilder.addParagraph(Paragraphs.of("白毛浮绿水,红掌").addComment(comment3).addText("清波。").center().create());// renderXWPFTemplate.create(documentBuilder.create(), Style.builder().buildFontFamily("微软雅黑").buildFontSize(14f).build()).writeToFile("C:\\Users\\Desktop\\增加批注.docx");}private static CommentBuilder newCommentBuilder() {return Comments.of().signature("Sayi", "s", LocaleUtil.getLocaleCalendar());}}
相关文章:
word导入导出-Apache POI 和 Poi-tl
word 文件读取 使用Apache POI Word 进行读取文件 使用poi 时如果报ClassNotFoundException 等错误,请注意请求以下maven 文件的版本 Apache POI Word 说明文档:Apache POI Word 说明文档 maven 解决依赖冲突教程:https://www.cnblogs.com/…...
Hadoop 集群环境搭建
目录 第一部分:系统安装... 3 1:图形化安装... 3 2:选择中文... 3 3:安装选项... 3 4:软件选项... 4 5:安装位置... 4 6:网络配置... 6 7:开始安装... 7 8:创建用户... 7…...
maven完结,你真的学完了吗
书接上文:必学的maven的起步-CSDN博客 分模块开发与设计 分模块开发: 创建模块书写代码模块 模块中需要其他的模块,就将他安装到仓库然后再dep中导入依赖通过maven指令安装模块到本地仓库(install) 聚合与继承 聚合…...
【Xcode】解决Unable to process request - PLA Update available
出现场景 IOS更新app时,使用Xcode上传新版本的包时,提示无法上传。 Unable to process request -PLA update available you currently dont have access to this membership resource. To resolve this issue ,agree to the latest program license a…...
力扣单调栈算法专题训练
目录 1 专题说明2 训练 1 专题说明 本博客用来计算力扣上的单调栈题目、解题思路和代码。 单调栈题目记录: 2232866美丽塔II 2 训练 题目1:2866美丽塔II。 解题思路:先计算出prefix[i],表示0~i满足递增情况下,0~i…...
【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理
于NI kb摘录 1.概述 对于NI RIO系列设备(CompactRIO、sbRIO、myRIO等)进行编程时,需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”,为用户提供图形用户界面(GUI),用于监控系统…...
关于游戏性能优化的技巧
关于游戏性能优化的技巧 游戏性能优化对象池Jobs、Burst、多线程间隔处理定时更新全局广播缓存组件缓存常用数据2D残影优化2D骨骼转GPU动画定时器优化DrawCall合批处理优化碰撞层优化粒子特效 游戏性能优化 好久没有在CSDN上面写文章了,今天突然看到鬼谷工作室技术…...
antdesignpro实现滚动加载分页数据
原理解析:每滚动一次相当于翻页,请求后端时给的页码参数要想办法加1,后端才能根据页码给出相应数据 注意后端收到页码参数之后要准确计算出每页的首行数据,关键逻辑代码: # 根据前端传的页码,进行计算下一…...
步兵 cocos2dx 加密和混淆
文章目录 摘要引言正文代码加密具体步骤代码加密具体步骤测试和配置阶段IPA 重签名操作步骤 总结参考资料 摘要 本篇博客介绍了针对 iOS 应用中的 Lua 代码进行加密和混淆的相关技术。通过对 Lua 代码进行加密处理,可以确保应用代码的安全性,同时提高性…...
【算法设计与分析】——动态规划算法
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
WPF组合控件TreeView+DataGrid之DataGrid封装
(关注博主后,在“粉丝专栏”,可免费阅读此文) wpf的功能非常强大,很多控件都是原生的,但是要使用TreeViewDataGrid的组合,就需要我们自己去封装实现。 我们需要的效果如图所示&#x…...
PIL/Pillow
Abstract PIL(Python Imaging Library)是一个用于图像处理的 Python 库。它提供了广泛的功能,包括图像加载、保存、调整大小、裁剪、旋转、滤镜应用等。 由于 PIL 的开发停止在 2009 年,因此推荐使用其后续的维护版本 Pillow。Pillow 是一个兼容 PIL 接…...
ARM 汇编入门
ARM 汇编入门 引言 ARM 汇编语言是 ARM 架构的汇编语言,用于直接控制 ARM 处理器。虽然现代软件开发更多地依赖于高级语言和编译器,但理解 ARM 汇编仍然对于深入了解系统、优化代码和进行低级调试非常重要。本文将为您提供一个简单的 ARM 汇编入门指南…...
SQL进阶:多表查询
在SQL基础部分,我们在讲解的过程中只用到了单表查询。但实际上,常见的业务场景单表查询不能满足,或者拆分查询性能过慢。这个时候我们就需要用到连接查询。即查询多表按一定规则合并后的数据。 注意,合并后的数据也是表ÿ…...
多层负载均衡实现
1、单节点负载均衡 1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的nginx来做反向代理 2)nginx将http请求分发给后端多个web-server 优点: 1)DNS-server不需要动 2)负载均衡:通过ngi…...
Redis取最近10条记录
有时候我们有这样的需求,就是取最近10条数据展示,这些数据不需要存数据库,只用于暂时最近的10条,就没必要在用到Mysql类似的数据库,只需要用redis即可,这样既方便也快! 具体取最近10条的方法&a…...
Mybatis之增删改查
目录 一、引言 二、Mybatis——增 举例:添加用户 三、Mybatis——删 举例:删除用户 四、Mybatis——改 举例:修改用户 五、Mybatis——查 六、注意 END: 一、引言 书接上回,我们在了解完mybatis之后,肯…...
Go 代码检查工具 golangci-lint
一、介绍 golangci-lint 是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golint、go vet 等。 优点: 运行速度快可以集成到 vscode、goland 等开发工具中包含了非常多种代码检查器可以集成到 CI 中这是包含的代码检查器列表&…...
SwiftUI 趣谈之:绝不可能(Never)的 View!
概览 SwiftUI 的出现极大的解放了秃头码农们的生产力。SwiftUI 中众多原生和自定义视图对于我们创建精彩撩人的 App 功不可没! 不过,倘若小伙伴们略微留意过 SwiftUI 框架头文件里的源代码,就会发现里面嵌有一些奇怪 Never 类型,…...
etcd是什么
目录 1.关于etcd2.应用场景 本文主要介绍etcd 概念和基本应用场景。 1.关于etcd etcd是一个开源的、分布式的键值存储系统,用于共享配置和服务发现。它是由CoreOS团队开发的,主要用于实现分布式系统的配置管理和服务发现。 etcd的主要特性包括&#x…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
