当单元格值是书签并且书签以编程方式更新(通过Java中的UNO调用)时,我真的很难找到如何强制程序刷新openoffice writer(3.3)单元格计算 .
例
| start | stop | duration |
| 9:30 | 11:30 | = <A2>-<B2> | <= cell formula
当用户手动编辑表时,此工作正常,当值移动到下一个单元格时,该值会更新 . 但是,如果我通过在单元格中的书签中插入文本来以编程方式更新值,则计算的单元格不会更新 . 如果你点击表格,他们会更新,但我希望这是自动的 .
书签在这样的表格中 .
| start | stop | duration |
| <start0> | <stop0> | = <A2>-<B2> |
更新书签的示例代码:
XBookmarksSupplier xBookmarksSupplier = (XBookmarksSupplier) UnoRuntime.queryInterface(XBookmarksSupplier.class, document);
XNameAccess xNamedBookmarks = xBookmarksSupplier.getBookmarks();
Object bookmark = xNamedBookmarks.getByName("stop0");
XTextContent xBookmarkContent = (XTextContent) UnoRuntime.queryInterface(XTextContent.class, bookmark);
xBookmarkContent.getAnchor().setString("11:30");
// code needed to force calculation of duration cell
1 回答
我自己弄清楚了 . 关键是要使用XRefreshable并知道表中的单元格公式算作"text fields" - 所以使用传统的冗长(但有趣)的UNO元编程风格......
来自XTextDocument实例的
查询文本字段供应商
从文本字段枚举中查询可刷新的实例
调用刷新
更新:如果要更新的公式中的源单元格已应用格式,则此方法无效,目标单元格的格式无关紧要 .
码