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…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
