Создание контроллеров автоматизации с помощью C++Builder



         

Коллекции объектов внутри серверов автоматизации


Внутри некоторых OLE-серверов (в частности, приложений MS Office) существует иерархия вложенных объектов примерно следующего вида:

wpe12.jpg (27475 bytes)

Примерная иерархия вложенных объектов OLE-сервера

Свойствами объектов Excel могут являться так называемые коллекции объектов. Например, коллекция Workbooks является свойством объекта Excel.Application, при этом она содержит набор вложенных объектов — рабочих книг Excel, а те, в свою очередь, обладают свойством Worksheets, представляющим собой коллекцию рабочих листов, каждый из которых обладает свойством Cells, являющимся коллекцией ячеек. Аналогично коллекция Charts также является свойством рабочей книги, и, соответственно, внутри свойствами объектов Word могут быть коллекции Paragraphs, Words, Tables.

В С++Builder обращение к члену коллекции производится следующим образом:

Variant  MyWorkbook=XL.OlePropertyGet(“WorkBooks”).OlePropertyGet(“Item”,1);

Рассмотрим пример, использующий такие коллекции. Пусть при нажатии на кнопку главной формы приложения-клиента будут выполнены следующие действия:

  • создание в Excel рабочей книги с двумя страницами и какими-нибудь именами;
  • заполнение первых 10 ячеек двух первых колонок числами;
  • вычисление в одиннадцатой ячейке их суммы;
  • изменение цвета и начертания шрифта в одной из колонок, а также цвета ячеек;
  • сохранение полученной рабочей книги в файле.
  • Код, заставляющий Excel выполнить эти действия, будет выглядеть следующим образом:

    //———————————————————————————————#include <vcl.h>

    #pragma hdrstop

    #include <ComObj.hpp>

    #include “xlauto2.h”

    //———————————————————————————————#pragma package(smart_init)

    #pragma resource “*.dfm”

    TForm1 *Form1;

    Variant XL,v0,v1,v2;

    //Function Item(“Item”);

    //———————————————————————————__fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

    {

    }

    //———————————————————void __fastcall TForm1::Button1Click(TObject *Sender)

    {

    XL=CreateOleObject(“Excel.Application.8”);

    XL.OlePropertySet(“Visible”,true);

    v0=XL.OlePropertyGet(“Workbooks”);




    Содержание  Назад  Вперед