Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

4 Март 2021, 18:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Заполнение таблицы макросом во Writer  (Прочитано 6998 раз)
0 Пользователей и 1 Гость смотрят эту тему.
CodeNull
Новичок
*
Offline Offline

Сообщений: 3


« Стартовое сообщение: 28 Апрель 2012, 07:15 »

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

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

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

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

П.С.: таблица уже существует,создавать её не требуется,необходимо лишь добавлять строки в цикле.
Записан
serhiy.k
Участник
**
Offline Offline

Сообщений: 27


« Ответ #1: 28 Апрель 2012, 22:24 »

В своем макросе 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

Это то, что я нарыл для своего макроса, оно работает, хотя я и не все в нем понимаю  Улыбка, правда здесь не все переменные определены, так как это только один макрос из библиотеки. Но может получиться у вас использовать его для создания своего макроса.
« Последнее редактирование: 28 Апрель 2012, 22:28 от serhiy.k » Записан
serhiy.k
Участник
**
Offline Offline

Сообщений: 27


« Ответ #2: 28 Апрель 2012, 22:37 »

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

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

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

Сообщений: 3


« Ответ #3: 2 Май 2012, 03:25 »

serhiy.k, спасибо, попробую переделать под свою задачу.
Записан
CodeNull
Новичок
*
Offline Offline

Сообщений: 3


« Ответ #4: 2 Май 2012, 08:07 »

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

Код:
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!"    'Задаем текст для ячейки
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!