Распределенные приложения: контроллеры автоматизации. Часть 2. Фертиков В.В. - 14 стр.

UptoLike

Составители: 

14
конкретной ячейке, таким образом, можно получить через свойство Cells со-
ответствующего рабочего листа:
Sheet.Cells[1,1].Value := 'Hello, World!';
А можно задать диапазон, размером в одну ячейку , и получить к ней дос-
туп через свойство Range:
Sheet.Range['A1'].Value := 'Hello, World!';
Достоинство второго способа проявляется в случае необходимости выво-
да в Excel больших массивов данных, что является обычной практикой . Уско-
рить такой вывод можно, используя следующий прием . Вместо последователь-
ного вывода данных в каждую ячейку :
for i:=1 to 10 do Sheet.Cells[1,i].Value := 'Hello, World!';
сначала формируется вариантный массив , после чего он выводится в диапазон
ячеек одним обращением к диспинтерфейсу :
Arr := VarArrayCreate([1,10],varVariant);
for i:=1 to 10 do Arr[i] := 'Hello, World!';
Sheet.Range['A1:J1'].Value := Arr;
При необходимости можно выводить за один прием и двумерные табли-
цы , образовывая на клиентской стороне двумерные вариантные массивы .
Оба рассмотренные способа вывода массивов проиллюстрированы в при-
мере реализации отклика на нажатие кнопки запуска генератора отчетов (ос-
тальные действия при разработке клиента полностью повторяют аналогичные
действия, проделанные нами для реализации клиента Word):
procedure TForm1.Button1Click(Sender: TObject);
var Exl,Book,Sheet,Arr: Variant; i,j: Integer;
begin
with Table1 do begin
DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
end;
try // если Excel запущен - подключиться к нему
Exl := GetActiveOleObject('Excel.Application');
except // если нет - запустить
Exl := CreateOleObject('Excel.Application');
end;
Exl.Visible:=True;
Book := Exl.WorkBooks.Add;
Sheet := Book.ActiveSheet;
Sheet.Range['A1'].Value := 'Hello, World!';
Sheet.Range['A2'].Value := ' ';
j:=0;
                                    14
конкретной ячейке, таким образом, можно получить через свойство Cells со-
ответствующего рабочего листа:
  Sheet.Cells[1,1].Value := 'Hello, World!';

      А можно задать диапазон, размером в одну ячейку, и получить к ней дос-
туп через свойство Range:
  Sheet.Range['A1'].Value := 'Hello, World!';

      Достоинство второго способа проявляется в случае необходимости выво-
да в Excel больших массивов данных, что является обычной практикой. Уско-
рить такой вывод можно, используя следующий прием. Вместо последователь-
ного вывода данных в каждую ячейку:
for i:=1 to 10 do Sheet.Cells[1,i].Value := 'Hello, World!';

сначала формируется вариантный массив, после чего он выводится в диапазон
ячеек одним обращением к диспинтерфейсу:
  Arr := VarArrayCreate([1,10],varVariant);
  for i:=1 to 10 do Arr[i] := 'Hello, World!';
  Sheet.Range['A1:J1'].Value := Arr;

      При необходимости можно выводить за один прием и двумерные табли-
цы, образовывая на клиентской стороне двумерные вариантные массивы.
      Оба рассмотренные способа вывода массивов проиллюстрированы в при-
мере реализации отклика на нажатие кнопки запуска генератора отчетов (ос-
тальные действия при разработке клиента полностью повторяют аналогичные
действия, проделанные нами для реализации клиента Word):
procedure TForm1.Button1Click(Sender: TObject);
var Exl,Book,Sheet,Arr: Variant; i,j: Integer;
begin
  with Table1 do begin
     DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
  end;
  try    // если Excel запущен - подключиться к нему
     Exl := GetActiveOleObject('Excel.Application');
  except // если нет - запустить
     Exl := CreateOleObject('Excel.Application');
  end;
  Exl.Visible:=True;
  Book := Exl.WorkBooks.Add;
  Sheet := Book.ActiveSheet;
  Sheet.Range['A1'].Value := 'Hello, World!';
  Sheet.Range['A2'].Value := ' №';
  j:=0;