Ñîçäàíèå êîíòðîëëåðîâ àâòîìàòèçàöèè ñ ïîìîùüþ C++Builder

       

Èñïîëüçîâàíèå èíôîðìàöèè èç áèáëèîòåê òèïîâ


Îòìåòèì, ÷òî â ïðèâåäåííîì âûøå ïðèìåðå ðàáî÷àÿ êíèãà è ðàáî÷èå ëèñòû áûëè ñîçäàíû ñ ïðèìåíåíèåì ïàðàìåòðîâ, ïðåäëàãàåìûõ ïî óìîë÷àíèþ. Êàêèì îáðàçîì ìîæíî èçìåíèòü ýòè ïàðàìåòðû?

Ðàññìîòðèì ñëåäóþùèé ïðèìåð êîäà:

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

XL.OlePropertySet(“Visible”,true);

v0=XL.OlePropertyGet(“Workbooks”);

v0.OleProcedure(“Add”,-4109);

Äàííûé ïðèìåð çàñòàâëÿåò Excel ñîçäàòü ïóñòîé ëèñò ñ äèàãðàììîé íà îñíîâå øàáëîíà, îòëè÷íîãî îò ïðèíÿòîãî ïî óìîë÷àíèþ.

Îòêóäà â äàííîì ñëó÷àå âçÿëàñü êîíñòàíòà –4109? Êàêèì îáðàçîì ìîæíî óçíàòü, êàêèìè åùå êîíñòàíòàìè ìîæíî ïîëüçîâàòüñÿ ïðè àâòîìàòèçàöèè ñ èñïîëüçîâàíèåì äàííîãî ñåðâåðà?

Îòâåòû íà ýòè âîïðîñû ìîæíî ïîëó÷èòü, îòêðûâ áèáëèîòåêó òèïîâ äàííîãî ñåðâåðà. Ñäåëàòü ýòî ìîæíî, âûáðàâ ïóíêò ìåíþ File/Open, óêàçàâ â ñïèñêå âîçìîæíûõ ôàéëîâ Type Library è âûáðàâ ñîîòâåòñòâóþùóþ áèáëèîòåêó òèïîâ (äëÿ Excel ýòî Excel8.olb, äëÿ Word – MSWord8.olb). Ïðè ýòîì ïî èñòå÷åíèè íåêîòîðîãî âðåìåíè (ýòè áèáëèîòåêè î÷åíü âåëèêè) áóäóò ñîçäàíû ôàéëû ñ îïèñàíèåì âñåõ èñïîëüçîâàííûõ êîíñòàíò, à òàêæå ñâîéñòâ è ìåòîäîâ ñîäåðæàùèõñÿ â ñåðâåðå îáúåêòîâ (â äàííîì ñëó÷àå Excel_TLB.cpp è Excel_TLB.h äëÿ Ñ++Builder ëèáî Excel_TLB.pas äëÿ Delphi). Ïðè ñîçäàíèè ýòèõ ôàéëîâ ïîÿâÿòñÿ ñîîáùåíèÿ îá îøèáêàõ, ñâÿçàííûå ñ òåì, ÷òî â êîäå Excel è Word ìîãóò èñïîëüçîâàòüñÿ çàðåçåðâèðîâàííûå ñëîâà Object Pascal èëè Ñ++.

Ðåäàêòîð áèáëèîòåêè òèïîâ ïðè ýòîì ïðåäñòàâëÿåò âñå âëîæåííûå îáúåêòû â âèäå èåðàðõè÷åñêîé ñòðóêòóðû, âíóòðè êîòîðîé ìîæíî íàéòè çíà÷åíèÿ íåîáõîäèìûõ êîíñòàíò.  ÷àñòíîñòè, â ðàçäåëå øàáëîíîâ ìîæíî íàéòè ñïèñîê êîíñòàíò, õàðàêòåðèçóþùèõ ðàçëè÷íûå òèïû øàáëîíîâ ëèñòîâ Excel:


Çíà÷åíèÿ êîíñòàíò, îïèñûâàþùèõ øàáëîíû MS Excel 97

Èìåííî òàì è ñîäåðæèòñÿ ññûëêà íà êîíñòàíòó xlWBATChart = –4109, ñîîòâåòñòâóþùóþ øàáëîíó äèàãðàììû.



Ïðè íåîáõîäèìîñòè èñïîëüçîâàòü â êîäå ïðèëîæåíèÿ-êëèåíòà èìåíîâàííûå êîíñòàíòû ìîæíî ñîñëàòüñÿ íà ôàéë Excel_TLB.h èëè Excel_TLB.pas â òåêñòå ìîäóëÿ ïðèëîæåíèÿ.

Òî÷íî òàê æå ìîæíî îïðåäåëèòü, êàêîâû ñâîéñòâà è ìåòîäû âëîæåííûõ îáúåêòîâ äàííîãî ñåðâåðà àâòîìàòèçàöèè:




Ñâîéñòâà è ìåòîäû êîëëåêöèè Workbooks

Èñïîëüçóÿ ñâåäåíèÿ î êîíñòàíòàõ, îáúåêòàõ, ñâîéñòâàõ è ìåòîäàõ OLE-ñåðâåðà, ìîæíî ìîäèôèöèðîâàòü ïðèâåäåííûé âûøå ïðèìåð. Òåïåðü ìû ñîçäàäèì â Excel ãðàôèê íà îñíîâå äàííûõ èç ðàáî÷èõ ëèñòîâ, ñêîïèðóåì åãî â áóôåð îáìåíà è ïåðåíåñåì â äîêóìåíò Word (îá îáúåêòàõ è êîíñòàíòàõ êîòîðîãî óçíàåì èç áèáëèîòåêè òèïîâ Word), ñíàáäèâ ãðàôèê ïîäïèñüþ. Ñîîòâåòñòâóþùèé êîä âûãëÿäèò ñëåäóþùèì îáðàçîì:

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

#pragma hdrstop

#include “ole2.h”

#include <ComObj.hpp>

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

#pragma resource “*.dfm”

TForm1 *Form1;

Variant XL,v0,v1,v2, v22, vrange, WD,a,b,c;

//———————————————————————————————__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”);

v0.OleProcedure(“Add”);

v1=v0.OlePropertyGet(“Item”,1);

v0=v1.OlePropertyGet(“Worksheets”) ;

v22=v1.OlePropertyGet(“Charts”) ;

v22.OleProcedure(“Add”);

v0.OlePropertyGet(“Item”,1).OlePropertySet(“Name”,”Áóõãàëòåðèÿ æåëòàÿ”);

v0.OlePropertyGet(“Item”,2).OlePropertySet(“Name”,”Áóõãàëòåðèÿ êðàñíàÿ”);

for (int j=1;j<3;j++)

{

v1=v0.OlePropertyGet(“Item”,j);

for (int i=1;i<11;i++)

{

v1.OlePropertyGet(“Cells”).OlePropertyGet(“Item”,i,1).OlePropertySet(“Value”,i);

v1.OlePropertyGet(“Cells”).OlePropertyGet(“Item”,i,2).OlePropertySet(“Value”,i*5);

v2=v1.OlePropertyGet(“Cells”).OlePropertyGet(“Item”,i,2);

v2.OlePropertyGet(“Font”).OlePropertySet(“Color”,clBlue);

v2.OlePropertyGet(“Font”).OlePropertySet(“Bold”,true);

v2.OlePropertyGet(“Interior”).OlePropertySet(“ColorIndex”,9-3*j);

}

v1.OlePropertyGet(“Cells”).OlePropertyGet(“Item”,11,1).OlePropertySet(“Value”,”=SUM(A1:A10)”);

v1.OlePropertyGet(“Cells”).OlePropertyGet(“Item”,11,2).OlePropertySet(“Value”,”=SUM(B1:B10)”);



}

vrange=v0.OlePropertyGet(“Item”,1).OlePropertyGet(“Range”,”A1:A10");

v1=v22.OlePropertyGet(“Item”,1);

v2=v1.OlePropertyGet(“SeriesCollection”);

v2.OleProcedure(“Add”,vrange);

vrange=v0.OlePropertyGet(“Item”,1).OlePropertyGet(“Range”,”B1:B10");

v2.OleProcedure(“Add”,vrange);

v1.OleProcedure(“Select”);

XL.OlePropertyGet(“Selection”).OleProcedure(“Copy”);

WD=CreateOleObject(“Word.Application.8”);

WD.OlePropertySet(“Visible”,true);

WD.OlePropertyGet(“Documents”).OleProcedure(“Add”);

a=WD.OlePropertyGet(“Documents”);

b=a.OleFunction(“Item”,1);

for (int i=1;i<5;i++)

{b.OlePropertyGet(“Paragraphs”).OleProcedure(“Add”);};

c=b.OleFunction(“Range”,1,2);

c.OleProcedure(“Paste”);

c=b.OleFunction(“Range”,3,3);

c.OlePropertySet(“Text”,”Ãðàôèê, ñêîïèðîâàííûé èç ðàáî÷åé êíèãè Excel “);

XL.OlePropertySet(“DisplayAlerts”,false);

XL.OlePropertyGet(“Workbooks”).OlePropertyGet(“Item”,1).OleProcedure(“SaveAs”,”test.xls”);

XL.OleProcedure(“Quit”);

WD.OlePropertySet(“DisplayAlerts”,false); b.OleProcedure(“SaveAs”,”test2.DOC”);

WD.OleProcedure(“Quit”);

}

//———————————————————————————————

Ðåçóëüòàòû ðàáîòû ïðèëîæåíèÿ ïðåäñòàâëåíû íà ðèñóíêå.



Ðåçóëüòàò àâòîìàòèçàöèè ñîçäàíèÿ äèàãðàììû Excel è ïåðåíîñà åå â Word

Èòàê, ñîçäàâ êîä, ïîäîáíûé ïðèâåäåííîìó âûøå, ìû ìîæåì àâòîìàòèçèðîâàòü äîâîëüíî ñëîæíûé íàáîð ðóòèííûõ ïîëüçîâàòåëüñêèõ îïåðàöèé, ÷òî ìîæåò áûòü âåñüìà óäîáíî, åñëè òàêèå îïåðàöèè ÷àñòî ïîâòîðÿþòñÿ. Ïðè ýòîì ñîçäàíèå òàêîãî êîäà â îáùåì ñëó÷àå, áåçóñëîâíî, òðåáóåò ãîðàçäî ìåíüøèõ óñèëèé, ÷åì íàïèñàíèå îòäåëüíîãî ïðèëîæåíèÿ, ðåàëèçóþùåãî êàêèå-òî ÷àñòè ôóíêöèîíàëüíîñòè Word èëè Excel.

Ñëåäóþùàÿ ñòàòüÿ äàííîãî öèêëà áóäåò ïîñâÿùåíà èñïîëüçîâàíèþ OLE-äîêóìåíòîâ â ïðèëîæåíèÿõ C++Builder.

Êîîðäèíàòû àâòîðà:

Öåíòð Èíôîðìàöèîííûõ Òåõíîëîãèé.

Òåë.: (095) 932-92-12, 932-92-13,

elmanova@citmgu.ru, http://www.citmgu.ru,

http://www.citforum.ru


Ñîäåðæàíèå ðàçäåëà