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

#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 свойств.