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

时间:2016-10-21 07:20:20

标签: java openoffice-writer uno

有没有办法检查书签是否放在表格单元格内?如果是这样,我怎么能得到单元格的索引(行和列)?

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

(非Java解决方案也可以接受,我只想得到这个想法)

2 个答案:

答案 0 :(得分:1)

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

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

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。对于简单表,B2仅表示第二行和第二列。对于具有跨越多列的行或跨越多行的列的表,可能会更复杂。

答案 1 :(得分:0)

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

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

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