我有一个Microsoft Word 2007 / xml .docx文件,我试图使用Apache POI 3.8beta4编辑.除其他外,该文档包含一个表,该表包含以${place.holder}形式保存占位符的单元格,我需要替换它.到目前为止我得到的是;
InputStream resourceAsStream = getClass().getResourceAsStream("/path/to/templates/rma.docx");
try {
XWPFDocument xwpfdoc = new XWPFDocument(resourceAsStream);
FileOutputStream fos = new FileOutputStream(new File("C:\\temp\\newTemplate.docx"));
for (XWPFTable table : xwpfdoc.getTables()) {
for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
String data = cell.getText();
if (data.contains("${rma.number}")) {
cell.setText("08739");
}
if (data.contains("${customer.name}")) {
cell.setText("Roger Swann");
}
}
}
}
xwpfdoc.write(fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
问题是cell.setText(“替换文本”}附加到已经存在的字符串数据而不是替换它,因此我在完成的文档中最终得到的是字符串“{place.holder}替换文本”.
如何替换文本而不是附加到文本?
问候
最佳答案 快速解决方法是获取单元格的基础文本,并更改它.它有点繁琐,但可以做到.您可能希望调用cell.getBodyElements()并遍历它们以查找包含文本的内容.然后,更改文本,而不是尝试直接更改单元格
较长期的一个是在POI bugzilla中打开一个新的bug,并上传一个失败的单元测试.这应该包括您的文件,并显示文本的“替换”,然后保存,重新加载和阅读.之后可以解决这个问题