如何通过POI修改word中的内容

   经过两天的苦苦寻找,总算找到了一个不错的方法,修改word(.doc)中的内容,这个是以修改表格中的内容为例。主要通poi来实现,整个过程。

在开始编写代码之前,需要下载poi架包创建一个word模板,通过匹配模板来进行修改。

通常会在选择poi的包时,不知道该选择哪一个,下面是我的测试项目截图,希望能给予您帮助:


下图为我创建的一个简单word模板:


现在已经存在的文档test.doc如下图,


通过程序将“张三”更改为“李四”

代码如下

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;


import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;


public class TestWriteWord {


public static void main(String[] args) {


// 创建map,修改姓名
Map<String, String> map = new HashMap<String, String>();
//
map.put("name", "李四");


HWPFDocument doc = new TestWriteWord().replaceDoc(
"files\\writeword_moban.doc", map);
try {
FileOutputStream out = new FileOutputStream("files\\test.doc");
doc.write(out);
out.close();


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


/**
* 读取word模板并替换变量

* @param srcPath
* @param map
* @return
*/
public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {
try {
// 读取word模板
FileInputStream fis = new FileInputStream(new File(srcPath));
HWPFDocument doc = new HWPFDocument(fis);
// 读取word文本内容
Range bodyRange = doc.getRange();
// 替换文本内容
for (Map.Entry<String, String> entry : map.entrySet()) {
bodyRange.replaceText("${" + entry.getKey() + "}",
entry.getValue());
}
return doc;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}


}

结果如下


 由于是第一次分享自己的经验,文章如有不足之处,还望海涵。


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
使用POI修改Word文件的步骤如下: 1. 使用org.apache.poi.xwpf.usermodel.XWPFDocument类打开Word文档。 2. 获取Word文档需要修改的部分,可以通过XWPFDocument类的getParagraphs()方法获取所有段落,然后遍历每个段落,使用XWPFParagraph类的getText()方法获取段落的文本内容,判断是否需要修改,如果需要修改则使用XWPFParagraph类的setRun()方法设置新的文本内容。 3. 如果需要修改表格内容,则可以使用XWPFDocument类的getTables()方法获取所有表格,然后遍历每个表格,使用XWPFTable类的getRow()方法获取表格的行,然后使用XWPFTableRow类的getCell()方法获取单元格,使用XWPFTableCell类的getParagraphs()方法获取单元格的文本内容,判断是否需要修改,如果需要修改则使用XWPFParagraph类的setRun()方法设置新的文本内容。 4. 如果需要在Word文档插入新的内容,则可以使用XWPFDocument类的createParagraph()方法创建新的段落,并且可以使用XWPFParagraph类的createRun()方法创建新的文本节点,然后使用XWPFRun类的setText()方法设置新的文本内容。 5. 修改完成后,使用XWPFDocument类的write()方法将修改后的Word文档保存到文件。 注:修改Word文档时,需要注意保持原有的样式和格式,可以使用XWPFDocument类的getStyle()方法获取样式,然后使用XWPFParagraph类的setStyle()方法或者XWPFRun类的setStyle()方法设置新的样式。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值