POI读取word模板,根据list动态添加表格,按照字段填充
说明:
1.建一个maven工程,引入下边的pom包。
2.在d盘下创建一个名为ok的文件夹,
3.在d盘ok文件夹里建一个名为 “体检卡出库单.docx” 的word文件。文件夹里的内容在下边
4.把下边的测试类复制进idea,运行一次就明白了。
四步搞定,超级简单,下边是复制的资料
这是模板图片:
这是实际效果图
--------------------------------------------------------------------------------------------------------------------------
下边是资料了
pom包
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>compile</scope>
</dependency>
</dependencies>
体检卡出库单word模板
体检卡出库单
销售订单编号:${orderNumber}
出库工单编号:outWordNumber
出库单编号:outNumber
订单类型:outType
客户名称:name
支持发放方式:distributionForm
业务员:wordPerson
业务部:wordDepartment
业务员电话:wordPH
业务员邮箱:wordEmile
体检卡数量:cardNumber
出库人:cardOutName
able
出库时间:outTime
测试类
package com.test;import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;import java.io.*;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Map.Entry;/*** 在world文档指定位置,插入表格*/
public class Test1 {public static void main(String[] args) {String templatePath = "D:\\ok\\体检卡出库单.docx";InputStream in = null;OutputStream out = null;try {in = new FileInputStream(templatePath);XWPFDocument doc = new XWPFDocument(in);//文本替换Map<String, String> param = new HashMap<String, String>();param.put("${orderNumber}", "ORD00000001");param.put("outWordNumber", "OUW00000001");param.put("outNumber", "OUT00000001");param.put("outType", "C端商城订单");param.put("name", "云龙斯基");param.put("distributionForm", "纸质体检卡");param.put("wordPerson", "云龙斯基");param.put("wordDepartment", "体检部");param.put("wordPH", "17352545182");param.put("wordEmile", "17352545182@163.com");param.put("cardNumber", "100");param.put("cardOutName", "云龙斯基");param.put("outTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));List<XWPFParagraph> allXWPFParagraphs = doc.getParagraphs();for (XWPFParagraph xwpfParagraph : allXWPFParagraphs) {List<XWPFRun> runs = xwpfParagraph.getRuns();for (XWPFRun run : runs) {String text = run.getText(0);if (text != null && text != "") {//指定位置开始创建表格 用able作为标记if (text.equals("able")) {//自定义生成list测试数据List<Map<String, String>> list = new ArrayList<Map<String, String>>();Map<String, String> map = new HashMap();map.put("number", "1");map.put("cardNumber", "体检卡1");map.put("schemeName", "方案1");map.put("cardYear", "2022");map.put("cardType", "纸质卡");Map<String, String> map2 = new HashMap();map2.put("number", "2");map2.put("cardNumber", "体检卡2");map2.put("schemeName", "方案2");map2.put("cardYear", "2022");map2.put("cardType", "纸质卡");list.add(map);list.add(map2);//动态集合格式封装成list<map> 这里定义map的key集合List<String> keyList = new ArrayList<String>();keyList.add("number");keyList.add("cardNumber");keyList.add("schemeName");keyList.add("cardYear");keyList.add("cardType");//表的行数int rows = list.size();//设置表头集合List<String> textList = new ArrayList<String>();textList.add("序号");textList.add("体检卡号");textList.add("方案名称");textList.add("体检年度");textList.add("体检卡类型");//表的列数int cols = textList.size();XmlCursor cursor = xwpfParagraph.getCTP().newCursor();XWPFTable tableOne = doc.insertNewTbl(cursor);//样式控制CTTbl ttbl = tableOne.getCTTbl();CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr();CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW();CTJc cTJc = tblPr.addNewJc();cTJc.setVal(STJc.Enum.forString("center"));//表格居中tblWidth.setW(new BigInteger("9000"));//每个表格宽度tblWidth.setType(STTblWidth.DXA);//表格的表头创建,去上边textList表头集合的字段XWPFTableRow tableRowTitle = tableOne.getRow(0);tableRowTitle.getCell(0).setText(textList.get(0));tableRowTitle.addNewTableCell().setText(textList.get(1));tableRowTitle.addNewTableCell().setText(textList.get(2));tableRowTitle.addNewTableCell().setText(textList.get(3));tableRowTitle.addNewTableCell().setText(textList.get(4));for (Map<String, String> cardMap : list) {//遍历list 得到要导出的每一行表格数据,数据结构是mapXWPFTableRow createRow = tableOne.createRow();for (int i = 0; i < keyList.size(); i++) {createRow.getCell(i).setText(cardMap.get(keyList.get(i)));}}run.setText("", 0);} else {for (Entry<String, String> entry : param.entrySet()) {String key = entry.getKey();int i = text.indexOf(key);if (text.indexOf(key) != -1) {text = text.replace(key, entry.getValue());run.setText(text, 0);}}}}}}out = new FileOutputStream("D:\\ok\\demo2.docx");// 输出doc.write(out);} catch (IOException e) {e.printStackTrace();} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}}
}
POI读取word模板,根据list动态添加表格,按照字段填充相关推荐
- 利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- Java读取word模板,并动态生成word
Java读取word模板,并动态生成word 最近有个需求是将数据库里存入的用户个人信息生成一个word然后供用户下载,第一时间就就想到了poi来做,所以记录一下免得自己忘了,忘了也可以回来看看
- java word模板poi生成文件_利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- 【java】poi-tl 1.9.1 word模板插入文本及动态复杂表格
文章目录 前言 一.需求 二.方案 三.实现 总结 前言 word生成是较为常见的功能,通常解决方案有freemarker.poi-tl等. 一般常规的word模板替换可采用第三方封装好的工具实现. ...
- 使用java Apache poi 根据word模板生成word报表
使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...
- POI利用word模板动态生成word报表以及动态生成word表格
目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...
- 图片复制word java_java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)...
java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...
- java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)
java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...
- java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...
- java使用poi操作word模板,插入图片、段落、表格
java使用poi操作word插入图片.段落.表格 其他链接 准备工作 创建word模板.docx文件 编写模板格式.xml文件 java上手poi maven依赖 使用到的包 具体应用 对应封装方法 ...
最新文章
- PostgreSQL命令行方式登陆数据库
- BGP小实验(二)——还是他,继续第二波走起来
- 1050 螺旋矩阵 (25 分
- wsl2无法使用systemctl_Win 10 更新,Linux 内核的 WSL 2 开始上线
- C++自学17:goto
- GIT每次上传代码都必须输入用户名解决方案
- 10个基础且实用的C语言经典实例【附源码】
- 最详细的Quartus + Modesim完整波形仿真过程
- mysql 提高查询速度_6条策略提高mysql查询速度
- Ubuntu安装输入法却不能切换输入法
- 三种方式让 Android WebView 支持文件下载
- PHP判断中文字符串的长度和字节长度
- 每天五分钟玩转K8S(二)
- VMware版虚拟机怎么安装win7系统(详细教程)
- Go语言经典库使用分析(五)| Negroni 中间件(一)
- vue3 PropType
- 直接法-穷举、递推和迭代
- LTspice基础教程-022.从MOS管提取参数生成spice模型
- vue移动端省市区三级联动
- 报错“在要求输入数字处找到非数字字符”