Заполнение таблицы макросом во Writer

Автор CodeNull, 28 апреля 2012, 08:15

0 Пользователи и 1 гость просматривают эту тему.

CodeNull

Приветствую участников форума!

Возник вопрос по которому поиск не дал нужной информации,а время на решение поджимает.

Есть некий документ в котором присутствует таблица (5 колонок и "неограниченное" количество строк).

Как в макросе обратиться к данной таблице, добавить строки и записать текст в ячейки таблицы?

П.С.: таблица уже существует,создавать её не требуется,необходимо лишь добавлять строки в цикле.

serhiy.k

#1
В своем макросе Translation Table я делал это следующим образом (макрос ищет пустую ячейку в одноколоночной таблице, (может сможет и во многоколоночной, не пробовал) и вставляет туда служебное слово):

Sub PrepareToConvert
 
  Dim iNumColumns As Integer
 
  Dim oTable as object

  oVC = ThisComponent.CurrentController.getViewCursor 'обращаемся к видимому курсору
  tName = oVC.TextTable.getName()  'получаем имя таблицы, в которой находится видимый курсор

  oTable=thisComponent.TextTables.getByName(tName)  'обращаемся к таблице по ее имени
  iNumColumns = oTable.Columns.getCount()  ' Ищем сколько колонок в таблице

  Dim oCell As Object
  Dim iRowIndex As Integer
  Dim iColIndex As Integer
  Dim bIsRowEmpty As Boolean

  ' Просматриваем каждый рядок, и если он пустой, вставляем туда служебное слово
  iRowIndex = 0
  Do While (iRowIndex < oTable.Rows.getCount())
 
     bIsRowEmpty = True ' Булеан истинный, пока мы не найдем пустую ячейку
     
     For iColIndex = 0 To (iNumColumns - 1)
        oCell = oTable.getCellByPosition(iColIndex, iRowIndex)
       
        If Not (oCell.Type = com.sun.star.table.CellContentType.EMPTY) Then 'Если ячейка не пустая, мы вставим в конце текста ячейки пробел
           bIsRowEmpty = False
           oTCurF = oCell.getText()
           oTCurF.insertString(oTCurF.getEnd(), " ", FALSE) ' вставляем пробел в конце текста
        End If
 
     Next iColIndex
     
     REM Если ячейка пустая, вставляем служебное слово туда
     If bIsRowEmpty Then
     oCell.String = "transliteservicetext"
     Else
        iRowIndex = iRowIndex + 1
     End If
 
  Loop
 
End Sub


Это то, что я нарыл для своего макроса, оно работает, хотя я и не все в нем понимаю  :), правда здесь не все переменные определены, так как это только один макрос из библиотеки. Но может получиться у вас использовать его для создания своего макроса.

serhiy.k

Вот еще код, нашел по адресу: http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=26203

'вставляет один рядок в конце таблицы
          oTable.Rows.insertByIndex(oTable.getRows().getCount(),1)


Посмотрите эту тему, возможно там описывается что-то похожее на то, что Вам нужно.

CodeNull

serhiy.k, спасибо, попробую переделать под свою задачу.

CodeNull

Выделил для себя ключевые моменты при работе с таблицами. Возможно кому-то пригодится:


Dim oAllTables as Variant
Dim oTable1 as Variant
Dim oTable2 as Variant
Dim oCell as Variant

'Получаем доступ к таблице
oAllTables = ThisComponent.getTextTables()  'Получаем все таблицы
oTable1 = oAllTables.getByIndex(0) 'Получаем таблицу по индексу, можно по имнени .getByName("Table1")

'Добавляем строку
oTable1.Rows.insertByIndex(1,2) 'вставка строки по индексу 1 - после какой строки вставить,
' 2 - количество строк для вставки

oCell = oTable1.getCellByPosition(0,3) 'Получаем доступ к ячейке (столбец, срока)
oCell.Text.String = "Viva!"    'Задаем текст для ячейки