Главная » Шпаргалка » DELPHI INTERBASE FireBird » Delphi и OLE Automation с Excel

Delphi и OLE Automation с Excel

Время приведено в минутах и секундах, округленных до ближайшей целой.

Размер электронной таблицы (строки * колонки)

Заполнение ячейка за ячейкой

Заполнение одной колонки за один проход

Заполнение всей таблицы за один проход

10 * 10

0:01

0:01

>0:01

100 * 10

0:07

0:01

0:01

1000 * 10

1:13

0:07

0:05

5000 * 10

5:22

0:35

0:25

 

 

 

 

Приблизительно ячейки/секунды

150

1500

2000

Только небольшие электронные таблицы могут быть эффективно заполнены методом записи данных в каждую ячейку по отдельности.

Большие таблицы эффективно заполнять колонка за колонкой.

Также необходимо учесть дополнительную сложность при кодировании методом "ячейка за ячейкой".

Использовать буфер для передачи данных также не рекомендуется, так как это нарушит имеющиеся в нем данные и может привести к усложнению и неудобночитаемости кода.

Сохранение данных в CSV-файле и загрузка его в Excel поможет ускорить вывод данных, но для этого потребуется дополнительное форматирование книги Excel в самом коде, что усложняет само кодирование и может привести к дополнительным ошибкам.

Использованные для тестов процедуры:


//-----------------------------------------------------------------------

procedure FillByCell;
var

xla: _Application;
xlw: _Workbook;
LCID: integer;
i, j: integer;
begin

xla := CoApplication.Create;
LCID := GetUserDefaultLCID;
try
xlw := xla.Workbooks.Add(xlWBATWorksheet, LCID);
for i := 1 to ROWS do
begin
for j := 1 to 10 do
begin
xla.Cells[i, j] := i + j;
end;
end;
xlw.close(false, '', false, LCID);
finally
xla.Quit;
end;
end;

//-----------------------------------------------------------------------

procedure FillByRow;
var

xla: _Application;
xlw: _Workbook;
CellFrom: string;
CellTo: string;
i, j: integer;
Row: array[1..10] of variant;
LCID: integer;
begin

xla := CoApplication.Create;
LCID := GetUserDefaultLCID;
try
xlw := xla.Workbooks.Add(xlWBATWorksheet, LCID);
for i := 1 to ROWS do
begin
for j := 1 to 10 do
begin
Row[j] := i + j;
end;
CellFrom := 'A' + InttoStr(i);
CellTO := 'J' + InttoStr(i);
xla.Range[CellFrom, CellTo].Value := VarArrayOf(Row);
end;
xlw.close(false, '', False, LCID);
finally
xla.Quit;
end;
end;

//-----------------------------------------------------------------------

procedure FillBySheet;
var

xla: _Application;
xlw: _Workbook;
CellFrom: string;
CellTo: string;
i, j: integer;
range: Variant;
row: array[1..10] of Variant;
LCID: integer;
begin

xla := CoApplication.Create;
LCID := GetUserDefaultLCID;
try
xlw := xla.Workbooks.Add(xlWBATWorksheet, LCID);
Range := VarArrayCreate([1, ROWS], varVariant);
for i := 1 to ROWS do
begin
for j := 1 to 10 do
begin
row[j] := i + j;
end;
Range[i] := VarArrayOf(row);
end;
CellFrom := 'A' + InttoStr(1);
CellTO := 'J' + InttoStr(ROWS);
xla.Range[CellFrom, CellTo].FormulaArray := Range;
xlw.close(false, '', False, LCID);
finally
xla.Quit;
end;
end;

 

Приложение 2 – Использование в Delphi класса-оболочки

Предпочтительней использовать вызовы Автоматизации непосредственно из приложения, нижеприведенный пример демонстрирует технологию создания в Delphi класса-оболочки для использования объектов Excel в ваших приложениях. Это позволит вам иметь простой интерфейс к объектам, а также помочь с любыми изменениями объектных интерфейсов Excel в ее будущих версиях.


Pages:  Prev  1 | 2 | 3 | 4  Next