转:

2018年03月24日 16:00:22 乄阿斗同學 阅读数:2977
 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chen497147884/article/details/79678513

POI的XWPFDocument和XWPFTemplate两种方法往word模板中填充数据

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.poi.POIXMLProperties.CoreProperties;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow; import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.PictureRenderData;
/**
* @author Admin
*
*/
public class WriteWordUtil { public void writeDocx(String path, Map<String, String> map) throws Exception {
InputStream is = new FileInputStream(path);
XWPFDocument doc = new XWPFDocument(is);
// XWPFWordExtractor extractor = new XWPFWordExtractor(doc) ;
// String text = extractor.getText();
// System.out.println(text);
// CoreProperties coreProps = extractor.getCoreProperties();
// this.printCoreProperties(coreProps);
// this.close(is);
} /**
* 替换段落里面的变量
*
* @param doc
* 要替换的文档
* @param params
* 参数
*/
private void replaceInPara(XWPFDocument doc, Map<String, Object> params) {
Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
XWPFParagraph para;
while (iterator.hasNext()) {
para = iterator.next();
this.replaceInPara(para, params);
}
} /**
* 替换段落里面的变量
*
* @param para
* 要替换的段落
* @param params
* 参数
*/
private void replaceInPara(XWPFParagraph para, Map<String, Object> params) {
List<XWPFRun> runs;
Matcher matcher;
if (this.matcher(para.getParagraphText()).find()) {
runs = para.getRuns();
for (int i = 0; i < runs.size(); i++) {
XWPFRun run = runs.get(i);
String runText = run.toString();
matcher = this.matcher(runText);
if (matcher.find()) {
while ((matcher = this.matcher(runText)).find()) {
runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));
}
// 直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,
// 所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。
para.removeRun(i);
if(runText.equals("null")){
runText="";
}
para.insertNewRun(i).setText(runText);
}
}
}
} /**
* 替换表格里面的变量
*
* @param doc
* 要替换的文档
* @param params
* 参数
*/
private void replaceInTable(XWPFDocument doc, Map<String, Object> params) {
Iterator<XWPFTable> iterator = doc.getTablesIterator();
XWPFTable table;
List<XWPFTableRow> rows;
List<XWPFTableCell> cells;
List<XWPFParagraph> paras;
while (iterator.hasNext()) {
table = iterator.next();
rows = table.getRows();
for (XWPFTableRow row : rows) {
cells = row.getTableCells();
for (XWPFTableCell cell : cells) { String cellTextString = cell.getText();
for (Entry<String, Object> e : params.entrySet()) {
if (cellTextString.contains("${"+e.getKey()+"}"))
cellTextString = cellTextString.replace("${"+e.getKey()+"}", e.getValue().toString());
}
cell.removeParagraph(0);
if(cellTextString.contains("${") && cellTextString.contains("}")){
cellTextString = "";
}
cell.setText(cellTextString);
// paras = cell.getParagraphs();
// for (XWPFParagraph para : paras) {
// this.replaceInPara(para, params);
// } }
}
}
} /**
* 正则匹配字符串
*
* @param str
* @return
*/
private Matcher matcher(String str) {
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
return matcher;
} /**
* 关闭输入流
*
* @param is
*/
private void close(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 关闭输出流
*
* @param os
*/
private void close(OutputStream os) {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 输出CoreProperties信息
*
* @param coreProps
*/
private void printCoreProperties(CoreProperties coreProps) {
System.out.println(coreProps.getCategory()); // 分类
System.out.println(coreProps.getCreator()); // 创建者
System.out.println(coreProps.getCreated()); // 创建时间
System.out.println(coreProps.getTitle()); // 标题
} /**
* word占位用${object}有缺陷不能填充图片
* @param filePath
* @param params
* @throws Exception
*/
public static String templateWrite(String filePath, Map<String, Object> params,String outFilePath)throws Exception{
InputStream is = new FileInputStream(filePath);
WriteWordUtil writeWordUtil = new WriteWordUtil();
XWPFDocument doc = new XWPFDocument(is);
// 替换段落里面的变量
writeWordUtil.replaceInPara(doc, params);
// 替换表格里面的变量
writeWordUtil.replaceInTable(doc, params);
OutputStream os = new FileOutputStream(outFilePath);
doc.write(os);
writeWordUtil.close(os);
writeWordUtil.close(is);
os.flush();
os.close();
return "";
}
/**
* word占位用{{object}}比较完美可以填充图片
* @param filePath
* @param params
* @param outFilePath
* @return
* @throws Exception
*/
public static String templateWrite2(String filePath, Map<String, Object> params,String outFilePath)throws Exception{
XWPFTemplate template = XWPFTemplate.compile(filePath).render(params);
FileOutputStream out = new FileOutputStream(outFilePath);
template.write(out);
out.flush();
out.close();
template.close();
return "";
}
     public static void main(String[] args) throws Exception {
Map<String, Object> params = new HashMap<String, Object>();
params.put("JSDWMC", "项目1\r\na");//  
params.put("XMMC", "项目2\r\nb");//  
params.put("1", "1");//
params.put("2", "2");//
params.put("object1", "o1");//  
params.put("object2", "o2");//
                params.put("localPicture", new PictureRenderData(120, 120, "D:\\A.png"));
templateWrite("D:\\template\\1.docx", params, "D:\\template\\5.docx");
templateWrite2("D:\\2.docx", params, "D:\\template\\7.docx"); }
}

用到的jar包

poi-3.17.jar

poi-examples-3.17.jar

poi-excelant-3.17.jar

poi-ooxml-3.17.jar

poi-ooxml-schemas-3.17.jar

poi-scratchpad-3.17.jar

poi-tl.jar

jar下载:下载地址

POI往word模板中写入数据的更多相关文章

  1. 向Word模板中填充数据

    现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...

  2. [转载]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  3. [原创]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  4. 将excel中的数据填入word模板中-VBA

    首先将word模板中需要填写excel中数据的空白处用自己独特的字符串标记,比如   数据001  什么的.如下图: 这样,就可以用vba搜寻这些自己独特的标记来根据excel内容填充word了. 第 ...

  5. POI向Excel中写入数据及追加数据

    import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import ...

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

    项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一 ...

  7. 读取word模板,填充数据后导出

    一.需求说明 定期生成word报告,报告中含有文本.表格.图表等元素,依次获取进行替换,保留原有样式,生成新的word文档 二.引入依赖 <dependency> <groupId& ...

  8. poi导出word模板项目实例(一个文件)

    在页面上填写值,然后导出到word模板中,并把页面上的值带到模板中,也就是导出word文档,提前有word 的模板形式, 1.jsp 页面   <table class="formTa ...

  9. 复制excel表,往excel表中写入数据

    import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...

随机推荐

  1. XSS(Cross Site Script)

    类型一:反射型XSS 简单地把用户输入的数据“反射”给浏览器.也就是说,黑客需要诱使用户“点击”一个恶意链接,才能攻击成功. 类型二:存储型XSS 把用户输入的数据“存储”在服务器端.这种XSS具有很 ...

  2. XAMPP安装PHP_GMP

    CentOS 6.4 Xampp 7.1.12 下载PHP7.1.12的源码包 yum install gmp-devel yum install m4 .tar.xz cd /root/php-/e ...

  3. 函数式编程与React高阶组件

    相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...

  4. Scrum立会报告+燃尽图(Final阶段第六次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2485 项目地址:https://coding.net/u/wuyy694 ...

  5. java实验三实验报告

    一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验过程(本次试验是在自己电脑上完成,没有使用实验楼) (一)敏捷开发与XP 1.XP是以开发符合客户需要的软件为目标而产生的一种 ...

  6. 20162314 《Program Design & Data Structures》Learning Summary Of The Ninth Week

    20162314 2017-2018-1 <Program Design & Data Structures>Learning Summary Of The Ninth Week ...

  7. 学校网站UI设计分析

    在一个团队中PM,要更好的掌握项目的实施管理,包括对UI的设计,作为团队项目的PM,在听了老师课上的讲解后,对UI有了新的认识,对此,我对下面网站有了些自己的想法(只可意会不可言传,O(∩_∩)O~) ...

  8. Oracle安装后出现的问题

    安装oracle没有勾选"安装模板数据库",可以通过执行以下命令进行修改: cd $ORACLE_HOME/rdbms/admin 到这个目录下sqlplus /as sysdba ...

  9. MIT挑战(如何在12个月内自学完成MIT计算机科学的33门课程|内附MIT公开课程资源和学习顺序

    译者注:本文译自Scott H. Young的博客,Scott拥有超强的学习能力,曾在12个月内自学完成麻省理工学院计算机科学的33门课程.本文就是他个人对于这次MIT挑战的介绍和总结. 版权声明:本 ...

  10. Matlab图像匹配问题

    已知一个任意形状,查找在大图像中最接近的形状位置. 输入:一个小图形状和一张大图 输出:最接近的形状在大图中的位置 假设: (1)已知形状与目标形状有一定的形变. (2)形状与大图像均为二值图像,图中 ...