我必须替换* .doc文件中的一些字符串。 (我知道使用* .docx会更容易。)当我执行多个操作时,请更换目录损害赔偿。有没有办法保存目录?
我有两段代码,似乎可以创建相同的输出。
更快的代码:
Map<String, String> items = new HashMap<>();
items.put("toreplace1", "replacement1");
items.put("toreplace2", "replacement2");
try (POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:\\doc\\mydocument.doc")); HWPFDocument doc = new HWPFDocument(fs);) {
Range r1 = doc.getRange();
items.forEach((k, v) -> {
for (int i = 0; i < r1.numSections(); ++i) {
Section s = r1.getSection(i);
for (int x = 0; x < s.numParagraphs(); x++) {
Paragraph p = s.getParagraph(x);
for (int z = 0; z < p.numCharacterRuns(); z++) {
CharacterRun run = p.getCharacterRun(z);
String text = run.text();
if (text.contains(k)) {
run.replaceText(k, v);
}
}
}
}
});
doc.write(new FileOutputStream(new File("c:\\doc\\mydocument_replaced.doc")));
}
较慢的代码:
Map<String, String> items = new HashMap<>();
items.put("toreplace1", "replacement1");
items.put("toreplace2", "replacement2");
try (HWPFDocument doc = new HWPFDocument(new FileInputStream(new File("c:\\doc\\mydocument.doc")))) {
Range range = doc.getRange();
items.forEach((k, v) -> {
range.replaceText(k, v);
});
doc.write(new FileOutputStream(new File("c:\\doc\\mydocument_replaced.doc")));
}
答案 0 :(得分:0)
为避免损坏_model
字段(_dataService
也是一个字段),可以将替换限制为仅对字段外部的文档零件进行限制。
字段始终以包含字节Word
的运行开始,并以包含字节TOC
的运行结束。因此,以下代码应仅将替换内容限制为仅在字段外部记录零件。使用此代码,应避免损坏0x13
。但是当然0x15
不会是最新的,必须手动更新( Ctrl + A ,然后是 F9 )。
TOC