Как проверить, когда закладка размещена внутри ячейки?

Есть ли способ проверить, находится ли закладка внутри ячейки таблицы? Если так, как я мог также получить индексы ячейки (строка и столбец)?

Мысль об использовании чего-то вроде XTextViewCursor, но я не знаю, как получить курсор в ячейке, чтобы сравнить позиции курсоров.

(Не Java-решения также приемлемы, я просто хочу получить идею)

2 ответа

Решение

Очевидно, якоря закладок работают как интерфейс TextRange. Увидеть 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 просто означает второй ряд и второй столбец. Это может быть более сложным с таблицами, в которых строки занимают несколько столбцов или столбцы охватывают несколько строк.

Существует решение 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);

Вы также можете извлечь "TextTable" от props а затем получить "CellName" от cellсвойства.

Другие вопросы по тегам