经过两天的苦苦寻找,总算找到了一个不错的方法,修改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;
}
}
}
结果如下
由于是第一次分享自己的经验,文章如有不足之处,还望海涵。