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

根据word模板生成word内容(JAVA)

主要是借助 poi-tl 来实现业务需求

        当时第一次尝试的是Apache poi不是很好用,不推荐

        第二次是xml,找的眼睛都花了,不推荐

要求:jdk1.8+,Apache POI5.2.2+ 我这里使用的是5.2.3版本

文档:Poi-tl Documentation

<!-- Apache POI  --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version></dependency>

注意这里需要确保没有其他的版本的poi,否则项目启动会报找不到类等错误,例如出现java.lang.NoSuchFieldError:Factory
解决方式:此问题是由pom依赖导致,通过Ctrl+N查看ThemeDocument类,出现多个版本,发现引入了两个不同版本的poi包,导致版本冲突。

其中NoSuchMethodError 、ClassNotFoundException 、NoClassDefFoundError异常都是版本不对的问题,需要升级版本


代码部分

// 利用map结构存储数据Map<String, Object> data = new HashMap<>();
// 指定路径 compile 编译模板 render添加数据源
XWPFTemplate template = XWPFTemplate.compile("xxx.docx").render(data);try {//write 输出到流template.writeAndClose(new FileOutputStream(输出路径"));} catch (IOException e) {e.printStackTrace();log.error("写入文件出错了");}

模板部分,使用poi-tl最大的难点或者说工作量在于模板的制作,具体可以看上面文档,文档中拥有具体格式。

  • 普通替换,只需要{{属性名}}
  • 逻辑判断是否显示:{{?属性名}}...{{/属性名}}
  • 列表{{*列表名}} 在这里,我单纯只使用了List<String>,文档中有更复杂的形式,包括对象
  • 表格我这里没有涉及到,不做考虑
http://www.lryc.cn/news/365281.html

相关文章:

  • vscode运行命令报错:标记“”不是此版本中的有效语句分隔符。
  • 搜索与图论:树的重心
  • 程序代写,代码编写
  • PbootCms微信小程序官网模版/企业官网/社交电商官网/网络工作室/软件公司官网
  • 【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战
  • Kotlin 函数式接口
  • 【数据结构】平衡二叉树(AVL树)
  • python数据文件处理库-pandas
  • stm32 h5 串口采用DMA循环BUFF接收数据
  • 海外媒体通稿:9个极具创意的旅游业媒体推广案例分享-华媒舍
  • 接口自动化框架封装思想建立(全)
  • char [] 赋新值
  • matlab计算图像信噪比SNR
  • DP读书:如何使用badge?(开源项目下的标咋用)
  • 使用JavaScript实现网页通知功能
  • 前端--导出
  • 【数据库系统概论】触发器
  • 小白跟做江科大32单片机之按键控制LED
  • 每天写java到期末考试(6.6)-java文件输入输出流实验
  • Word2021中的The Mathtype DLL cannot be found问题解决(office 16+mathtype7+非初次安装)
  • 【Android面试八股文】在Java中传参数时是将值进行传递,还是传递引用?
  • 神经网络 torch.nn---Linear Layers(nn.Linear)
  • PPT视频如何16倍速或者加速播放
  • 【ai】DeepStream 简介
  • 如何学习使用淘宝API?淘宝API运营场景
  • Java 面试题:Java 的动态代理是基于什么原理?
  • Python logging 模块详解
  • http://account.battlenet.com.cn
  • java第二十课 —— 面向对象习题
  • Flask的模块化实践