[英]Updating a Microsoft Word 2007/xml .docx file with Apache POI appends text rather than replaces?
我有一個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(“ replacement text”}附加到已經存在的字符串數據上而不是替換它,所以我在完成的文檔中最終得到的是字符串“ {place.holder} replacement text”。
如何替換文字而不是附加文字?
問候
快速的解決方法是獲取單元格的基礎文本,並進行更改。 這有點奇怪,但是可以做到。 您可能想調用cell.getBodyElements()
並遍歷它們以查找包含文本的內容。然后,在其上更改文本,而不是嘗試直接更改單元格
較長期的做法是在POI Bugzilla中打開一個新錯誤,然后上傳失敗的單元測試。 這可能應該包括您的文件,並顯示文本的“替換”,然后保存,重新加載和閱讀。 然后可以解決此問題
cell.removeParagraph(0);
cell.setText(entrada.getValue());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.