Дублируйте последнюю строку таблицы в LibreOffice, используя BASIC

У меня есть именованная таблица в документе ODT, и я хочу дублировать последнюю строку со всем содержимым в новую строку (см. Выше), а затем заменить некоторое значение в этом дубликате.

Я сделал это в Word/VBA уже для DOCX:

Dim tbl As Table
Dim rowNew As Row

Set tbl = ActiveDocument.Tables(1)
Set rowNew = tbl.Rows.Add(tbl.Rows(tbl.Rows.Count))
rowNew.Range.FormattedText = tbl.Rows(tbl.Rows.Count).Range.FormattedText
'~~~> This is required as the above code inserts a blank row in between
tbl.Rows(tbl.Rows.Count - 1).Delete
rowNew.Select
Selection.Find.Execute FindText:="xx*", ReplaceWith:="bar", MatchWildcards:=True
Selection.Collapse

Возможно ли это и в LibreOffice? Пока что у меня есть:

DIM tbl As Variant
DIM row As Variant
tbl =  ThisComponent.getTextTables().getByIndex(0)
row = tbl.getRows().getByIndex(tbl.getRows().getCount()-1)

Как выбрать и продублировать всю строку и запустить поиск и замену в этой новой строке? Подсказка: строка может содержать другие объекты, такие как подтаблицы.

1 ответ

Сначала выделите всю строку, перемещая курсор над ней. Затем используйте диспетчер для копирования и вставки в новую строку. Что-то вроде этого:

oVC.goRight(3, True)  'Extend the selection.
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:InsertRowsAfter", "", 0, Array())
oVC.goDown(1, False)  'Move to the new row.
oVC.goLeft(2, False)  'Move to the first column.
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
Другие вопросы по тегам