Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отчет в Excel


ян ©   (2006-09-22 13:17:00) 

Всем Добрый день!
Ситуация такая, делаю отчет в Excel, есть готовый шаблон,
к ячейкам доступ получаю так
E.Application.Cells(15,1) := 's';
проблема в том что в каждую ячейку запись происходит примерно
за секунду!!!
но шаблон довольно сложный!!
есть ли какой способ ускорить эту процедуру?


ян   (2006-09-22 17:26:00) [1]

Так, двумерный массив я объявлять научился!
Идея состоит в том, чтобы данные записать вначале в массив, а потом
уже из массыва в Excel?

так лучше получается:))
но в шаблоне пропадают много(именно не все, а много) ячеек с текстом!
т. е. можно ли перед запуском программы выгрузить все значения
из шаблона в массив, сделать изменения, а потом уже обратно?


Сергей М.   (2006-09-22 16:28:00) [2]


> каждые элемент которого - массив из 30 элементов


Гдеты это обозначил ?

MyVar := VarArrayCreate([0,16 4, 0, 29],varVariant);

В этом примере создается двумерный массив вариантов размерностью 165 х 30.

Сравни со своим кодом и сделай выводы ...


ян   (2006-09-22 16:12:00) [3]

166 на 30

MyVar := VarArrayCreate([0,165],varVariant);
for n:=0 to 165 do
  begin
    MyVar[n] := VarArrayOf([' ',30,TRue]);
  end;

MyVar - массив из 166 элементов,
каждые элемент которого - массив из 30 элементов...только тип не понятно
как определить
Не так?


Сергей М.   (2006-09-22 16:04:00) [4]


> 165 на 30


Ну и где ты обозначил именно такую размерность ?


ян   (2006-09-22 16:01:00) [5]

Как я понял надо написать такой код:

 MyVar := VarArrayCreate([0,165],varVariant);//
 for n:=0 to 165 do
   begin
     MyVar[n] := VarArrayOf([' ',30,TRue]);
   end;
 E.Application.Range['A1:DA30'].Value := MyVar;

165 на 30 это насколько я поня размер области в Excel...

Так?

Все равно быстрее не работает...


Сергей М.   (2006-09-22 14:14:00) [6]


> alex_*** ©   (22.09.06 13:42) [3]


VarArrayOf(...) создает одномерный массив, в отличие от VarArrayCreate(..), которая создает массив произвольной размерности.

Выбор той или иной ф-ции зависит от конкретной задачи, требующей конкретной размерности массива ячеек.


alex_***   (2006-09-22 13:42:00) [7]

код для создания 2 мерного массива


ян   (2006-09-22 13:27:00) [8]

MyVar := VarArrayOf(...); //или VarArrayCreate(..)

А что в скобках должно быть?:)


Сергей М.   (2006-09-22 13:20:00) [9]

Есть.

var
MyVar: Variant;

...

MyVar := VarArrayOf(...); //или VarArrayCreate(..)

E.Application.Range[..].Value := MyVar


Наверх

Титульная страница Поиск, карта сайта Написать письмо