#java #openoffice-writer #uno
#java #openoffice-writer #uno
Вопрос:
Есть ли какой-либо способ проверить, помещена ли закладка внутри ячейки таблицы? Если да, то как я мог бы также получить индексы ячейки (строка и столбец)?
Думал об использовании чего-то вроде XTextViewCursor
, но я не знаю, как получить курсор ячейки, чтобы сравнить позиции курсоров.
(Решения, отличные от java, также приемлемы, я просто хочу понять идею)
Ответ №1:
По-видимому, привязки закладок работают подобно интерфейсу TextRange. Смотрите 7.1.2 Can I check the current selection for a TextTable or Cell
в документе macro Эндрю Питоняка.
В следующем примере 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
просто означает вторую строку и второй столбец. Это может быть сложнее с таблицами, строки которых охватывают несколько столбцов, или со столбцами, охватывающими несколько строк.
Ответ №2:
Существует решение 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
свойств.