poi 操作word文档

0. 参考文档

感谢大萌音音’s B站视频的分享, 如有不懂, 可以去看这个视频

1. poi 依赖

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>

2. java 替换word模板流程

  1. word中主要由两部分组合而成: 段落和表格
  2. 判断需要被替换的部分是在段落中还是表格中
  3. 假设在表格中, 则遍历所有的单元格内容, 找到并修改
  4. 在将修改后的覆盖原内容, 最后输出即可

3. 代码, 主要看replaceWordContent方法

public class ReplaceWordContent {/*** poi 对word模板的替换* @param args 主方法必要参数*/public static void main(String[] args) {FileInputStream inputStream = null;OutputStream out = null;XWPFDocument document = null;try {inputStream = new FileInputStream("C:\\Users\\via\\Desktop\\TEST.docx");out = new FileOutputStream("C:\\Users\\via\\Desktop\\TEST1.docx");document = new XWPFDocument(inputStream);List<XWPFTable> tables = document.getTables();Map<String, String> map = new HashMap<>();map.put("${name}", "张三");map.put("${age}", "15");map.put("${gender}", "男");map.put("${position}", "总经理");replaceWordContent(document, map);document.write(out);} catch (Exception e) {e.printStackTrace();} finally {IOUtils.closeQuietly(inputStream);IOUtils.closeQuietly(out);IOUtils.closeQuietly(document);}}public static void replaceWordContent(XWPFDocument document, Map<String, String> relationMap){List<XWPFTable> tables = document.getTables();// 获取所有表格for (XWPFTable table : tables) {// 获取表格的每一行数据for (XWPFTableRow row : table.getRows()) {// 获取表格的每一个单元格for (XWPFTableCell cell : row.getTableCells()) {String text = cell.getText();// 移除操作, 因为poi底层对word是追加操作, 如果不移除, 会在原内容是拼接,cell.removeParagraph(0);// 再新增一个格式XWPFParagraph paragraph = cell.addParagraph();// 设置行间距paragraph.setSpacingBetween(1);// 替换后的新值String newText = replaceCellContent(text, relationMap);// 将值放入单元格cell.setText(newText);}}}}public static String replaceCellContent(String cellContent, Map<String, String> relationMap){if (isEmpty(cellContent)){return "";}for (Map.Entry<String, String> entry : relationMap.entrySet()) {String k = entry.getKey();String v = entry.getValue();if (cellContent.contains(k)){cellContent = cellContent.replace(k, v);return cellContent;}}return "";}public static boolean isEmpty(String str){if (null == str || str.length() == 0){return true;}return false;}
}

java使用poi替换word模板相关推荐

  1. 最新实用版——JAVA使用POI替换Word模板中指定字符,并可插入图片。

    JAVA替换Word模板指定字符,并可插入图片. 在一年之前还之前有写过一篇使用jacob对word插入图片的博客.点击率蛮高8800多次,当然多亏了百度搜索引擎的帮忙

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

    介绍 java使用poi在word模板中替换柱状图.折线图.饼图.表格.文本.图片 软件架构 安装教程 环境搭建:jdk1.8.0_291.maven1.8.0_291 IDEA工具:IntelliJ ...

  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文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...

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

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

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

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

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

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

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

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

最新文章

  1. Python游戏开发:最强大脑第一关,数字华容道
  2. Design Pattern Explained 读书笔记二——设计模式序言
  3. mysqld命令查看数据库目录
  4. 03凑算式(数字填空)
  5. python3遍历选中文件夹下的文件【GUI编程】
  6. C#线程篇---Task(任务)和线程池不得不说的秘密
  7. leetcode题库--112路径总和
  8. 【java学习之路】(javaWeb【后端】篇)006.FilterListener
  9. vue-awesome-swiper:slideTo无效
  10. 2022华为软件精英挑战赛比赛经历
  11. 详细介绍如何从零开始制作51单片机控制的智能小车(一)———让小车动起来
  12. 几何算法合集(3D)
  13. Spring Boot 中yml文件小图标不正确解决方案
  14. JS的严格模式和标准模式
  15. MacBook:如何拆卸或安装内存
  16. c语言课程设计研究生初试录取报告,C语言程序设计课程设计 研究生初试录取
  17. docker-compose部署xxl-job-admin 分布式任务调度平台
  18. python批量修改文件名(将中文改为英文首字母)和xml文件
  19. 图片相似度识别算法,百度图片识别算法
  20. 基于asp.net748警官学院物资管理系统

热门文章

  1. 苹果x和xsmax有什么区别_苹果三种不同开发者详细区别在哪?为什么有三类帐号?...
  2. Execution failed for task ‘:app:mergeDebugResources‘
  3. 第三方电商平台账号授权查询快递物流信息API代码-快递100API
  4. Harbor 2.0.2 密码修改 Admin密码重置
  5. 便携式明渠流量计比对装置,流量液位比对现场应用技术特点
  6. 2023内推指南,硬件专场
  7. 看准时机“参战”,华为能走通高端路线吗?
  8. 如何做一个类似QQ说说体系的表结构(一)
  9. 车市下滑 领克汽车为什么逆势上扬?
  10. 基于VHDL的数字时钟实验报告