如何检查书签何时放置在单元格内?

How to check when a bookmark placed inside a cell?

有什么方法可以检查 table 单元格中是否放置了书签?如果是这样,我怎样才能获得单元格的索引(行和列)?

想过使用 XTextViewCursor 之类的东西,但我不知道如何获取单元格光标以便比较光标位置。

(非java解决方案也接受table,我只是想了解一下)

显然书签锚点的工作方式类似于 TextRange 界面。请参阅 Andrew Pitonyak 的宏文档中的 7.1.2 Can I check the current selection for a TextTable or Cell

以下 python 示例检查锚点是否位于 table 单元格中。如果是,它获取单元格名称,我们可以从中确定行和列。

def is_bookmark_in_cell():
    doc = XSCRIPTCONTEXT.getDocument()
    marks = doc.getBookmarks()
    anchor = marks.getByName("MyMarkInCell").getAnchor()
    cell = anchor.Cell
    if cell:
        cellName = cell.CellName
    else:
        # Bookmark is not in a cell.

在我的测试中,单元名称是 B2。对于简单的 tables,B2 只是表示第二行和第二列。对于 table 行跨越多列或列跨越多行的 table 可能更复杂。

有一个 java 解决方案,基于 @JimK 的回答:

XTextRange bookmark = getBookmarkByName(bookmarkName);
XPropertySet props = UnoRuntime.queryInterface(XPropertySet.class, bookmark);
Object maybeCell = props.getValue("Cell");
XCell cell = UnoRuntime.queryInterface(XCell.class, maybeCell);

您还可以从 props 中提取 "TextTable",然后从 cell 的属性中检索 "CellName"