LibreOffice Writer: получить содержимое следующей ячейки после найденной

Мне нужно найти текст в таблице Writer, а затем передать содержимое ячейки справа от найденного текста в переменную. Текст успешно найден с этим кодом:

Sub get_contr_num
    dim oDoc as Object
    dim oFound as Object
    dim oDescriptor
    dim oCursor as Object
    oDoc = ThisComponent
    oDescriptor = oDoc.createSearchDescriptor()
    oDescriptor.SearchString = "Contract *No"
    oDescriptor.SearchRegularExpression = true
    oFound=oDoc.FindFirst(oDescriptor)
End Sub

Теперь мне нужно получить содержимое правой ячейки. Насколько я понимаю, oFound является объектом XTextRange, и мне нужно XCellRange с параметрами строки и столбца. Как мне это сделать?


person Michael O.    schedule 12.07.2018    source источник


Ответы (1)


Из раздела 7.1.2 документа Эндрю Питоняк, 2015 г.:

Объект TextRange имеет свойство TextTable и свойство Cell. Эти два свойства не являются пустыми, если текстовый диапазон содержится в ячейке текстовой таблицы.

Вот пример кода.

cellname_found = oFound.Cell.CellName
cellname_right = Chr(Asc(Left(cellname_found, 1))+1) & Right(cellname_found, 1)
oTable = oFound.TextTable
oCell_right = oTable.getCellByName(cellname_right)

Было бы проще, если бы CellProperties давал номера строк и столбцов вместо имени. По-видимому, нет, поэтому необходимо использовать манипуляции со строками для анализа свойства CellName.

person Jim K    schedule 12.07.2018
comment
Спасибо, сработало после модификации: cellname_right = Chr(Asc(Left(cellname_found, 1))+1) + Mid(cellname_found, 2). Поскольку, хотя столбцы часто не превышают диапазон A – Z, номера строк в моем случае содержат более одной цифры. - person Michael O.; 12.07.2018