一.引入相关jar
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
二.编写案例
public class DocWriter {
public static void writer(String inputSrc, String outSrc, Map<String,String> map) {
try {
XWPFDocument doc = new XWPFDocument(POIXMLDocument.openPackage(inputSrc));
/**
* 替换段落中指定的文本
*/
for(XWPFParagraph p : doc.getParagraphs()){
List<XWPFRun> runs = p.getRuns();
if(runs != null){
for(XWPFRun r : runs){
//需要替换的文本
String text = r.getText(0);
//替换指定的文本
for(String key : map.keySet()){
if(text != null && text.equals(key)){
//替换的时候要注意,setText是有两个参数的
//第一个是替换的文本,第二个是从哪里开始替换
//0是替换全部,如果不设置那么默认就是从原文字
//结尾开始追加
// r.setText(map.get(key),0);
r.addBreak();//换行
r.setText(map.get(key));
r.addBreak();
r.setText("############");
}
}
}
}
}
/**
* 替换表格中指定的文字
*/
for(XWPFTable tab : doc.getTables()){
for(XWPFTableRow row : tab.getRows()){
for(XWPFTableCell cell : row.getTableCells()){
//注意,getParagraphs一定不能漏掉
//因为一个表格里面可能会有多个需要替换的文字
//如果没有这个步骤那么文字会替换不了
for(XWPFParagraph p : cell.getParagraphs()){
for(XWPFRun r : p.getRuns()){
String text = r.getText(0);
for(String key : map.keySet()){
if(text.equals(key)){
r.setText(map.get(text),0);
}
}
}
}
}
}
}
doc.write(new FileOutputStream(outSrc));
System.out.println("替换完成");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException, InvalidFormatException {
Map<String, String> map = new HashMap<String, String>();
map.put("================", "同意! CE2988/张三 2019-01-21");
//文件路径
String srcPath = "f:\\word\\needle.docx";
//替换后新文件的路径
String destPath = "f:\\word\\output.docx";
writer(srcPath,destPath,map);
}
}
三.运行结果