我想使用Apache POI 3.10在XWPFDocument中操作文本运行,方法XWPFRun.setText()
不能按我期望的方式工作。这段代码:
XWPFDocument doc = new XWPFDocument(resp.getContent());
for (XWPFParagraph paragraph : doc.getParagraphs()) {
for (XWPFRun run : paragraph.getRuns()) {
int textPosition = run.getTextPosition();
if (run.getText(textPosition) != null) {
System.out.println("old value: " + run.getText(textPosition));
run.setText("value changed", textPosition);
System.out.println("new value: " + run.getText(textPosition));
}
}
}
产生输出:
old value: change me
new value: change me
在XWPFDocument中更新单次运行的正确方法是什么?
答案 0 :(得分:0)
我必须使用run.toString()
来解决与您类似的问题。 (org.apache.poi 3.15)调用.toString()
后,setText(..)
的输出会发生变化。
System.out.println("toString(): " + run.toString());
答案 1 :(得分:0)
已经有一段时间了,注释之间隐藏了解释,因此值得总结一下。
实际上,Apache POI行为没有错误。问题出在命名约定中-尽管POI使用get / set方法,但这并不意味着类遵守JavaBeans规则。在此示例中,setText
方法确实可以完成工作-所有更改将在保存编辑后的文档后应用。