Как проверить, когда закладка размещена внутри ячейки?
Есть ли способ проверить, находится ли закладка внутри ячейки таблицы? Если так, как я мог также получить индексы ячейки (строка и столбец)?
Мысль об использовании чего-то вроде 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
свойства.