说明:

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动态添加表格,按照字段填充相关推荐

  1. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  2. Java读取word模板,并动态生成word

    Java读取word模板,并动态生成word ​ 最近有个需求是将数据库里存入的用户个人信息生成一个word然后供用户下载,第一时间就就想到了poi来做,所以记录一下免得自己忘了,忘了也可以回来看看

  3. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  4. 【java】poi-tl 1.9.1 word模板插入文本及动态复杂表格

    文章目录 前言 一.需求 二.方案 三.实现 总结 前言 word生成是较为常见的功能,通常解决方案有freemarker.poi-tl等. 一般常规的word模板替换可采用第三方封装好的工具实现. ...

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

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

  6. POI利用word模板动态生成word报表以及动态生成word表格

    目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...

  7. 图片复制word java_java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)...

    java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...

  8. java poi实现word导出(包括word模板的使用、复制表格、复制行、插入图片的使用)

    java poi实现数据的word导出(包括word模板的使用.复制表格.复制行.插入图片的使用) 1.实现的效果 实现病人基本信息.多条病历数据.多项检查项图片的动态插入(网络图片) 2.模板 把w ...

  9. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档

    java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...

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

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

最新文章

  1. PostgreSQL命令行方式登陆数据库
  2. BGP小实验(二)——还是他,继续第二波走起来
  3. 1050 螺旋矩阵 (25 分
  4. wsl2无法使用systemctl_Win 10 更新,Linux 内核的 WSL 2 开始上线
  5. C++自学17:goto
  6. GIT每次上传代码都必须输入用户名解决方案
  7. 10个基础且实用的C语言经典实例【附源码】
  8. 最详细的Quartus + Modesim完整波形仿真过程
  9. mysql 提高查询速度_6条策略提高mysql查询速度
  10. Ubuntu安装输入法却不能切换输入法
  11. 三种方式让 Android WebView 支持文件下载
  12. PHP判断中文字符串的长度和字节长度
  13. 每天五分钟玩转K8S(二)
  14. VMware版虚拟机怎么安装win7系统(详细教程)
  15. Go语言经典库使用分析(五)| Negroni 中间件(一)
  16. vue3 PropType
  17. 直接法-穷举、递推和迭代
  18. LTspice基础教程-022.从MOS管提取参数生成spice模型
  19. vue移动端省市区三级联动
  20. 报错“在要求输入数字处找到非数字字符”

热门文章

  1. linux git difftool,git difftool 详解
  2. Python内置函数一览表
  3. 将读书笔记自动生成思维导图(Markdown)
  4. 黑客技术思维导图总结
  5. MATLAB怎么输入无穷小,matlab如何输入代码
  6. java实现令牌桶算法
  7. vue 全年日历显示并且日期批量选择
  8. 传统车载网络,软件定义汽车
  9. PostScript 打印描述语言 介绍
  10. 苹果画画软件_想在iPad 上画画,推荐用这些软件