XWPFDocument读取word并修改发送
来源:互联网 发布:怎样修改mac地址 编辑:程序博客网 时间:2024/06/06 02:38
isFile为文件路径,data为一个map对象,data.put("userName",userName);那么就需要在文档中写${userName}就可以输出到文档了
package com.jeeplus.modules.stock;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.poi.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;public class FileAlterInfo {/** * 实现对word读取和修改操作 * * @param filePath * word模板路径和名称 * @param map * 待填充的数据,从数据库读取 * @throws IOException * @throws InvalidFormatException */public static void readwriteWord(String inFile, Map<String, Object> data) throws InvalidFormatException, IOException {InputStream is = new FileInputStream(inFile);XWPFDocument document;try {document = new XWPFDocument(OPCPackage.open(is));// 替换段落里面的变量replaceInPara(document, data);OutputStream os = new FileOutputStream(inFile);document.write(os);close(os);close(is);} catch (Exception e) {e.printStackTrace();}}/** * 替换段落里面的变量 * * @param doc * 要替换的文档 * @param params * 参数 */private static void replaceInPara(XWPFDocument doc, Map<String, Object> params) {Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();XWPFParagraph para;while (iterator.hasNext()) {para = iterator.next();replaceInPara(para, params);}}/** * 替换段落里面的变量 * * @param para * 要替换的段落 * @param params * 参数 */private static void replaceInPara(XWPFParagraph para, Map<String, Object> params) {List<XWPFRun> runs;Matcher matcher;String runText = "";if (matcher(para.getParagraphText()).find()) {runs = para.getRuns();if (runs.size() > 0) {int j = runs.size();for (int i = 0; i < j; i++) {XWPFRun run = runs.get(0);String i1 = run.toString();runText += i1;para.removeRun(0);}}System.out.println(runText);matcher = matcher(runText);if (matcher.find()) {while ((matcher = matcher(runText)).find()) {runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1))));}// 直接调用XWPFRun的setText()方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,// 所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。para.insertNewRun(0).setText(runText);}}}/** * 正则匹配字符串 * * @param str * @return */private static Matcher matcher(String str) {Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(str);return matcher;}/** * 关闭输入流 * * @param is */private static void close(InputStream is) {if (is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}/** * 关闭输出流 * * @param os */private static void close(OutputStream os) {if (os != null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}
阅读全文
0 0
- XWPFDocument读取word并修改发送
- java:读取并修改word中的内容并保存。
- 读取配置文件并修改
- 读取并修改app.config
- 读取并修改 config 文件
- C#读取word文档内容并显示
- 利用Java读取并写入Word文件
- 利用Java读取并写入Word文件
- 利用Java读取并写入Word文件
- java POI 修改 读取 word 内容
- 读取word模板,并写入数据到word文件中
- 读取并修改App.config文件
- 读取并修改App.config文件(转载
- 读取并修改App.config文件(转载)
- 读取并修改App.config文件(转载)
- 读取并修改App.config文件(转载)
- 读取并修改App.config文件
- 读取并修改App.config文件(转载)
- 第一次js课
- python---pickle使用
- 关于公式对齐的排版
- weex采坑之旅(一)初识weex
- 在js中怎样获得checkbox里选中的多个值?
- XWPFDocument读取word并修改发送
- Swift装饰者模式
- EIGRP协议配置
- mysql 替换字符串
- [项目实训]6.8 contest的add功能最终完成
- php 字符串压缩
- 从高考到程序员
- 放在HTML里的哪一部分JavaScripts会在页面加载时被执行?
- 一步一步学ROP之Android ARM 32位篇 -- 阅读笔记及实践