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

UptoLike

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

27
Клиент Microsoft Excel с механизмом раннего связывания
Усовершенствуем предложенным способом разработанный ранее генера-
тор отчетов в книге Microsoft Excel. Начнем с того, что изучим библиотеку ти-
пов, поставляемую в файле excel9.olb, сначала в редакторе библиотек, а за-
тем импортируем ее в состав проекта клиентского приложения. Все действия
при этом аналогичны только что описанным. Заменим приведенным ниже
фрагментом код отклика на событие запуска генератора, а затем рассмотрим
особенности программирования по сравнению с методом доступа через
Variant:
procedure TForm1.Button1Click(Sender: Tobject);
var Exl:_Application; Book:_WorkBook; Sheet:_WorkSheet;
i,j: Integer; Arr: Variant;
begin
with Table1 do begin
DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
end;
try // если Excel запущен подключиться к нему
Exl := GetActiveOleObject(
ClassIDToProgID(CLASS_ExcelApplication))
as _Application;
except // если нет запустить
Exl:=CoExcelApplication.Create;
end;
Exl.Visible[0]:=True;
Book := Exl.WorkBooks.Add(EmptyParam,0);
Sheet := Book.ActiveSheet as _WorkSheet;
Sheet.Range['A1',EmptyParam].Value := 'Hello, World!';
Sheet.Range['A2',EmptyParam].Value := ' ';
j:=0;
for i:=0 to Table1.FieldCount-1 do
Sheet.Cells.Item[2,i+2].Value :=
Table1.Fields.Fields[i].FieldName;
Arr := VarArrayCreate([0,Table1.FieldCount],varVariant);
with Table1 do while not Eof do begin
j:=j+1;
Arr[0] := IntToStr(j);
for i:=0 to FieldCount-1 do
Arr[i+1] := Fields.Fields[i].AsString;
Sheet.Range['A'+IntToStr(j+2),
Chr(Ord('A')+FieldCount)+IntToStr(j+2)].Value := Arr;
Next
end;
Table1.Close
end;
Итак , соединение с сервером реализовано так же, как и сервером Word.
Но вызывает удивление то, что свойство Visible является векторным. Дейст-
вительно, при изучении библиотеки типов можно обратить внимание на то, что
                                     27
      Клиент Microsoft Excel с механизмом раннего связывания
      Усовершенствуем предложенным способом разработанный ранее генера-
тор отчетов в книге Microsoft Excel. Начнем с того, что изучим библиотеку ти-
пов, поставляемую в файле excel9.olb , сначала в редакторе библиотек, а за-
тем – импортируем ее в состав проекта клиентского приложения. Все действия
при этом аналогичны только что описанным. Заменим приведенным ниже
фрагментом код отклика на событие запуска генератора, а затем рассмотрим
особенности программирования по сравнению с методом доступа через
Variant :

procedure TForm1.Button1Click(Sender: Tobject);
var Exl:_Application; Book:_WorkBook; Sheet:_WorkSheet;
     i,j: Integer; Arr: Variant;
begin
  with Table1 do begin
     DatabaseName:='DBDEMOS'; TableName:='country.db'; Open
  end;
  try      // если Excel запущен – подключиться к нему
     Exl := GetActiveOleObject(
       ClassIDToProgID(CLASS_ExcelApplication))
          as _Application;
  except // если нет – запустить
     Exl:=CoExcelApplication.Create;
  end;
  Exl.Visible[0]:=True;
  Book := Exl.WorkBooks.Add(EmptyParam,0);
  Sheet := Book.ActiveSheet as _WorkSheet;
  Sheet.Range['A1',EmptyParam].Value := 'Hello, World!';
  Sheet.Range['A2',EmptyParam].Value := ' №';
  j:=0;
  for i:=0 to Table1.FieldCount-1 do
     Sheet.Cells.Item[2,i+2].Value :=
       Table1.Fields.Fields[i].FieldName;
  Arr := VarArrayCreate([0,Table1.FieldCount],varVariant);
  with Table1 do while not Eof do begin
     j:=j+1;
     Arr[0] := IntToStr(j);
     for i:=0 to FieldCount-1 do
       Arr[i+1] := Fields.Fields[i].AsString;
     Sheet.Range['A'+IntToStr(j+2),
       Chr(Ord('A')+FieldCount)+IntToStr(j+2)].Value := Arr;
     Next
  end;
  Table1.Close
end;
     Итак, соединение с сервером реализовано так же, как и сервером Word.
Но вызывает удивление то, что свойство Visible является векторным. Дейст-
вительно, при изучении библиотеки типов можно обратить внимание на то, что