Èñïîëüçîâàíèå èíôîðìàöèè èç áèáëèîòåê òèïîâ
Îòìåòèì, ÷òî â ïðèâåäåííîì âûøå ïðèìåðå ðàáî÷àÿ êíèãà è ðàáî÷èå ëèñòû áûëè ñîçäàíû ñ ïðèìåíåíèåì ïàðàìåòðîâ, ïðåäëàãàåìûõ ïî óìîë÷àíèþ. Êàêèì îáðàçîì ìîæíî èçìåíèòü ýòè ïàðàìåòðû?
Ðàññìîòðèì ñëåäóþùèé ïðèìåð êîäà:
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