介绍

java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片

软件架构

安装教程

  1. 环境搭建:jdk1.8.0_291、maven1.8.0_291
  2. IDEA工具:IntelliJ IDEA 2021.1.2 (Community Edition)
  3. git clone poi-demo: java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片

实现思路

  1. 通过poi加载XWPFDocument对象,再获取word模板文档里的所有段落XWPFParagraph、图片XWPFPicture、表格XWPFTable、图表XWPFChart对象,最后对这些对象进行数据替换

替换对比

  1. 原模板

  2. 替换后

使用说明

  1. 抽象类WordContentParser

package com.poi.demo.parser;import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.*;
import java.util.Objects;/*** <p>Word内容解析器</p>** @author Allen Yang* @datetime 2021/11/18 14:46*/
@Setter
@Getter
@Slf4j
public abstract class WordContentParser {public static final String ERR_MSG_DOC_LOAD_FAIL = "文档加载失败";public static final String ERR_MSG_DOC_OUTPUT_FAIL = "文档导出失败";public static final String ERR_MSG_DOC_NOT_LOADED = "文档未加载";public static final String ERR_MSG_PARAM_NOT_INITIALIZED = "替换参数未初始化";public static final String ERR_MSG_ROW_ELEMENT_MISMATCH = "下标${index}的行值元素不匹配";public static final String ERR_MSG_TABLE_NOT_EXIST = "不存在下标${index}的表格";public static final String ERR_MSG_CELLS_NOT_UNANIMOUS = "下标${index}的表格值和单元格个数不一致";public static final String ERR_MSG_TEMPLATE_CHART_NOT_EXIST = "不存在下标${index}的图表";public static final String ERR_MSG_PIC_NOT_ADD = "下标${index}的图片替换失败";public static final String ERR_MSG_PIC_NOT_EXIST = "模板中${type}下标${index}的图片不存在替换值";//文档对象private XWPFDocument doc;public WordContentParser(InputStream in) {try {this.doc = new XWPFDocument(in);} catch (IOException e) {log.error("{}:{}", ERR_MSG_DOC_LOAD_FAIL, e.getMessage());throw new RuntimeException(ERR_MSG_DOC_LOAD_FAIL);}}public WordContentParser(XWPFDocument doc) {this.doc = doc;}public WordContentParser(String path) {this.doc = loadXWPFDocument(path);}public static XWPFDocument loadXWPFDocument(String path) {InputStream in = null;XWPFDocument doc = null;try {in = new FileInputStream(path);doc = new XWPFDocument(in);} catch (Exception e) {log.error("{}:{}", ERR_MSG_DOC_LOAD_FAIL, e.getMessage());throw new RuntimeException(ERR_MSG_DOC_LOAD_FAIL);} finally {if (Objects.nonNull(in)) {try {in.close();} catch (IOException e) {e.printStackTrace();}}return doc;}}public File outputFile(String path) {if (Objects.isNull(doc)) {throw new RuntimeException(ERR_MSG_DOC_LOAD_FAIL);}File file = null;FileOutputStream fos = null;try {file = new File(path);if (file.exists()) {file.delete();}fos = new FileOutputStream(path);doc.write(fos);} catch (Exception e) {log.error("{}:{}", ERR_MSG_DOC_OUTPUT_FAIL, e.getMessage());throw new RuntimeException(ERR_MSG_DOC_OUTPUT_FAIL);} finally {if (Objects.nonNull(fos)) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}return file;}}public abstract XWPFDocument replace();
}
  1. 继承抽象类的有子类WordParagraphParser、WordPictureParser、WordTableParser、WordChartParser,分别实现了replace()替换word文字、图片、表格、图标,具体实现看项目代码

  2. 下载项目后运行WordContentParserTest

最后

  1. 有更好的方案或者问题咨询请联系我
  2. 源码:poi-demo: java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片

java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片相关推荐

  1. java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据

    java向Word模板中替换书签数据,插入图片,插入复选框,插入Word中表格的行数据,删除表格行数据 使用插件:spire.doc 创建工具类,上代码: import com.spire.doc.D ...

  2. Java导出数据到Word模板中

    Java导出数据到Word模板. 前言 网上的方案 需求介绍 模板 简介 使用体验 poi-tl Freemarker 操作步骤 总结 前言 相信很多人都会遇到Java导出的业务,Java导出主要有导 ...

  3. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  4. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子

    [实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...

  5. java使用poi操作word模板,插入图片、段落、表格

    java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...

  6. Java使用poi根据word模板进行导出(有效可行)

    最近一直在做与导出这部分相关的事情,有一个就是需要将数据库中查询到的信息写入到word模板中再进行导出.下面的代码直接复制使用即可,没啥毛病,无论是段落中的,还是表格中的,都是有效的.使用过程中遇到的 ...

  7. org.apache.poi往word模板中填充数据(word2003)

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知道这个API是可以用来做 j ...

  8. java使用POI根据word模板生成文档,并且根据参数值实现换行

    一,word模板如下 二,将word模板中的参数对应的值放到map中 /*** 将word模板中需要的参数值统一放到map中* * @param resource* @param template* ...

  9. 记录java使用POI实现word模板数据填充

    一.前言 最近项目遇到个需求,在模板中填充数据,刚开始是用smartBi报表进行填充,输出参数都是必录,无法满足需求.在网上查了很多资料,有些需要把文档转成xml格式修改里面内容,IDEA里面修改要替 ...

最新文章

  1. 在if里赋值要注意=和==的优先级,==优先于=
  2. STM32F4 HAL库开发 -- 工程模板解读
  3. 2018年工业机器人销量排位_2020年全球工业机器人现状与竞争情况 中国为全球最大供应国...
  4. Missed in my life《2013》
  5. 单机最大负载_分布式高可靠之负载均衡,今天看了你肯定会
  6. Microsoft Edge 81 稳定版发布
  7. 25-限制容器对内存的使用
  8. RegExp 误用解析
  9. SQL注入 时间延时注入语句
  10. t检验的显著性p值python_Python P值
  11. 对集合对象进行排序:根据对象集合其中一属性进行排序
  12. C++学习第六天——数组
  13. 项目经理进阶:如何做好一个领导者
  14. 微信红包 php算法,基于PHP微信红包的算法探讨
  15. Python学习之路:关于列表(List)复制的那点事
  16. Mobileye REM地图如何解决高精地图落地难点
  17. 【重识云原生】计算第2.2节——主流虚拟化技术之VMare ESXi
  18. git 强制同步远端仓库
  19. PHP中常用数学、日期、字符串函数
  20. Thingsboard Gateway

热门文章

  1. CSS特性 之渐变 (全网最全)
  2. 欧拉编程c语言作业数值分析,数值分析作业 欧拉 龙格库塔
  3. 【js】判断某一天是星期几
  4. 微信小程序和微信小游戏的区别
  5. k8s的集群搭建前的相关操作--必看
  6. 2019计算机科学导论作业,北语--19春《计算机科学导论》作业-1234(13页)-原创力文档...
  7. 如何防止用户修改html提交,当用户刷新页面时,HTML表单被重新提交 - 我如何阻止这种情况发生?...
  8. 会员注册 php,php实现会员登陆注册页有html加Session和Cookie
  9. 中国最难考试TOP5,考研竟然最简单?
  10. 网络综合布线工程技术实训室解决方案(转载)