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

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

26 Октябрь 2020, 13:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Как создать и изменять размеры массива формата Array (0)(0) ?  (Прочитано 2907 раз)
0 Пользователей и 1 Гость смотрят эту тему.
idro
Участник
**
Offline Offline

Сообщений: 24


« Стартовое сообщение: 9 Апрель 2016, 16:30 »

Задача : Нужно создать и заполнить таблицу во Writer.

Делаю так. Собираю данные в двухмерный массив: Array(Num,Num1)
Создаю таблицу исходя из размера массива:  oTable1.initialize(Ubound(Array,1),Ubound(Array,2))
Получаю из таблицы пустой массив: mMassivDataArray=oTable1.getDataArray
Перегоняю в этот массив свой с данными : mMassivDataArray=Array
Заполняю таблицу: oTable1.SetDataArray(mMassivDataArray)
Вопрос : Можно ли обойтись без промежуточного массива, а оперативно менять  размер mMassivDataArray(Num)(Num1)  ?
ReDim Preserve mMassivDataArray(Num)(Num1) - ругается на отсутствие запятой
Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 024


iMac, LibreOffice и Apache OpenOffice


« Ответ #1: 9 Апрель 2016, 18:17 »

Делаю так. Собираю данные в двухмерный массив: Array(Num,Num1)
Создаю таблицу исходя из размера массива:  oTable1.initialize(Ubound(Array,1),Ubound(Array,2))
Получаю из таблицы пустой массив: mMassivDataArray=oTable1.getDataArray
Перегоняю в этот массив свой с данными : mMassivDataArray=Array
Заполняю таблицу: oTable1.SetDataArray(mMassivDataArray)
Вопрос : Можно ли обойтись без промежуточного массива, а оперативно менять  размер mMassivDataArray(Num)(Num1)  ?
ReDim Preserve mMassivDataArray(Num)(Num1) - ругается на отсутствие запятой
Бред какой-то, аж мозг задымился Афро

Вы пишете: Делаю так. Собираю данные..., Создаю таблицу..., Получаю из таблицы..., Перегоняю..., Заполняю таблицу..., — вы в самом деле всё это делаете Непонимающий , а ругается только на отсутствие запятой? Да за такой код нужно...

Во первых Array не мажет быть переменной — это зарезервированное слово для функции создания массива.
Во вторых конструкция mMassivDataArray(Num)(Num1) не может быть массивом, но может быть элементом массива с целочисленными индексами Num и Num1

Напишите точней, что нужно сделать.
Записан

idro
Участник
**
Offline Offline

Сообщений: 24


« Ответ #2: 9 Апрель 2016, 19:12 »

Я написал суть ,  убрал лишние строки кода. Меня интересует можно ли непосредственно создать и менять размер mMassivDataArray(Num)(Num1) до создания таблицы? Без того, что бы собирать все в промежуточный массив.

Вот сам кусок кода объявление переменных и сроку запроса ResultSetк базе я упускаю :

Цитата:
   ReDim mMassiv(0,5)
   mMassiv(0,0)  = "п/п"
   mMassiv(0,1)  = "Номер"   
   mMassiv(0,2)  = "Организация"
   mMassiv(0,3)  = "Адрес"   
   mMassiv(0,4)  = "Дата"
       ' Заполняем массив данными из базы
   If Not IsNull(ResultSet) Then
      While ResultSet.next
         lNum=lNum+1   
         ReDim Preserve mMassiv(lNum,4)
         For lNum1=1 to 3
            mMassiv(lNum,0) = lNum
            mMassiv(lNum,lNum1) = ResultSet.GetString(lNum1)
         Next
         mMassiv(lNum,4) = cDate(ResultSet.GetString(4))
      Wend
   End if
    oDoc=StarDesktop.loadcomponentfromurl("private:factory/swriter","_blank",0,Array())
    oText=oDoc.Text
    oCursor=oText.createTextCursor ' создаём скрытый курсор,
  oTable1 = oDoc.createInstance("com.sun.star.text.TextTable")
  oTable1.initialize(Ubound(mMassiv,1)+1,5)
  oDoc.Text.insertTextContent(oCursor, oTable1, False)
  oTblColSeps = oTable1.TableColumnSeparators
  oTable1.HoriOrient = 6  'таблица занимает всю ширину
  oTblColSeps(0).Position =400
  oTblColSeps(1).Position =1400
  oTblColSeps(2).Position =4600
  oTblColSeps(3).Position =8300
  oTable1.TableColumnSeparators = oTblColSeps  

   If Ubound (mMassiv) = 0 then ' данных нет , выходим
      Exit Sub
   End if

   mMassivDataArray=oTable1.getDataArray
   mMassivDataArray = mMassiv
   oTable1.SetDataArray(mMassivDataArray)
« Последнее редактирование: 9 Апрель 2016, 19:19 от idro » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 024


iMac, LibreOffice и Apache OpenOffice


« Ответ #3: 9 Апрель 2016, 22:58 »

Вот мой вариант:
Код:
ReDim mMassiv(0,4)
mMassiv(0,0)="п/п"
mMassiv(0,1)="Номер"
mMassiv(0,2)="Организация"
mMassiv(0,3)="Адрес"
mMassiv(0,4)="Дата"
'Заполняем массив данными из базы
If Not IsNull(ResultSet) Then
While ResultSet.Next
lNum=lNum+1
ReDim Preserve mMassiv(lNum,4)
mMassiv(lNum,0)=lNum
For lNum1=0 to 3
mMassiv(lNum,lNum1)=ResultSet.GetString(lNum1+1)
Next
mMassiv(lNum,4)=str(CDate(ResultSet.GetString(5)))
Wend
End If
If Ubound(mMassiv)=0 Then Exit Sub 'если данных нет, выходим до создания документа и таблицы

oDoc=StarDesktop.loadcomponentfromurl("private:factory/swriter","_blank",0,Array())
oText=oDoc.Text
oCursor=oText.createTextCursor 'создаём текстовый курсор
oTable1=oDoc.createInstance("com.sun.star.text.TextTable")
oTable1.initialize(Ubound(mMassiv,1)+1,5)
oDoc.Text.insertTextContent(oCursor, oTable1, False)
oTblColSeps=oTable1.TableColumnSeparators
oTable1.HoriOrient=6 'таблица занимает всю ширину (она и без этой строки изначально создаётся на всю ширину)
oTblColSeps(0).Position=405
oTblColSeps(1).Position=1400
oTblColSeps(2).Position=4600
oTblColSeps(3).Position=8300
oTable1.TableColumnSeparators=oTblColSeps
oTable1.SetDataArray(mMassiv) 'без промежуточного массива
Записан

idro
Участник
**
Offline Offline

Сообщений: 24


« Ответ #4: 10 Апрель 2016, 06:30 »

Спасибо.  У меня, почему -то , не приняло в первый раз  двухмерный массив, вот и полез в дебри.  Непонимающий
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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