Как создать и изменять размеры массива формата Array (0)(0) ?

Автор idro, 9 апреля 2016, 16:30

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

idro

Задача : Нужно создать и заполнить таблицу во 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

Цитата: idro от  9 апреля 2016, 14:30Делаю так. Собираю данные в двухмерный массив: 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) - ругается на отсутствие запятой
Бред какой-то, аж мозг задымился O0

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

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

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

idro

#2
Я написал суть ,  убрал лишние строки кода. Меня интересует можно ли непосредственно создать и менять размер 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)

rami

Вот мой вариант: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

Спасибо.  У меня, почему -то , не приняло в первый раз  двухмерный массив, вот и полез в дебри.  ???