Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Komunikace s MS Office
5. října 2001, 00.00 | Toto "lehké naťuknutí" velmi obsáhlého tématu by vám mělo dát základ k vlastním experimentům v oblasti komunikace s Office pomocí COM/OLE.
O tom, jak se dají z Delphi ovládat MS Office (dále jen "MSO"), by se určitě dala naspat celá kniha. Nejspíš taková i existuje. Já se ale pokusím vše podstatné shrnout do jednoho článku. Spoléhám už na inteligenci čtenáře, že zde popsané postupy dokáže v případě potřeby rozšířit a zobecnit. Článek tedy není návodem typu "jak udělat to a to", ale spíše jakýmsi obecným minikukátkem do problematiky a měl by vás podnítit k vlastnímu experimentování.
Všechny postupy v tomto článku jsem odladil na Office 97, ale s novějšími verzemi by snad neměly být žádné problémy. Přiznám se, že jak je to s kompatibilitou s verzí 95, netuším.
COM + OLEVeškerá kominikace s MSO se realizuje pomocí technologie OLE, která je zase technicky vzato nadmnožinou rozhraní COM. Detaily se tady nebudeme zabývat, technologie OLE je sama o sobě poměrně složitá. Podstatné je, že programátor má k dispozici objekty ("z vnějšku" podobné těm v Delphi) reprezentující jednotlivé aplikace Office. Tyto objekty mají své vlastnosti a metody, pomocí kterých lze MSO pohodlně ovládat.
V Delphi pro reprezentaci objektů použijeme datový typ Variant. Ten má tu užitečnou vlastnost, že může reprezentovat libovolný datový typ a tím pádem i náš OLE objekt. A jelikož už určitě netrpělivě čekáte na nějakou ukázku použití, tady ji máte:
|
V prvním řádku výkonného kódu programu vytvoříme OLE objekt třídy Excel.Application. Znamená o tedy, že budeme pracovat s Excelem. Podobně pro Word by název třídy zněl Word.Application, analogicky i pro ostatní aplikace Office. Pro zbytek článku se budeme držet Excelu, v ostatních aplikacích Office jsou postupy takřka shodné. Po zavolání funkce CreateOleObject se daná aplikace načte do paměti a čeká na další příkazy.
Na druhém řádku přikazujeme, aby bylo hlavní okno aplikace viditelné (defaultně není) a na třetím zase aplikaci ukončujeme. Kód toho tedy moc užitečného nedělá. K tomu bychom potřebovali vědět něco o objektu třídy Excel.Application. Takže se vrhneme na shánění informací.
Object Inspector ve VBAInformace o objektech v Excelu nejlépe získáme z prohlížeče objektů (Object Inspector) ve Visual Basicu for Applications (VBA), což je makrojazyk vestavěný do aplikací MSO. VBA najdete v aplikacích Office v nabídce Nástroje|Makro|Editor jazyka Visual Basic nebo pod klávesovou zkratkou F11. Prohlížeč objektů v něm spustíte klávesou F2 nebo příslušnou ikonou.
Na obrázku vidíte "inspekci" objektu Excel.Application. Vlevo je seznam všech objektů v Excelu, napravo jsou pak vypsány všechny metody a vlastnosti vybraného objektu. K vybrané položce je vždy k dispozici stručná nápověda.
S pomocí prohlížeče objektů se dá docela dobře zkoumat celá struktura komponent, ze kterých je Excel z hlediska programátora složen. Dost často ale není čas na zdlouhavé hledání, jakým objektem něco zařídit. A proto si ukážeme asi nejefektivnější způsob zjišťování těchto informací v Excelu.
Nahrávání makerZní to jednoduše a jednoduché to také je. Pokud chcete programátorsky donutit Excel něco udělat, nahrajte si tuto činnost (nebo alespoň její klíčové části) jako makro. Tuto myšlenku zvýrazňuji tučně, protože je to asi nejdůležitější a hlavně nejužitečnější poučka z celého článku. Výsledek makra bude sice zapsaný ve VBA, ale tento kód je pro Pascalistu snadno pochopitelný a není nijak těžké ho převést do Delphi. Většinou stačí přidat středníky, závorky, dvojtečky před rovnítka (příkaz přiřazení), nahradit dvojité uvozovky kolem řetězců jednoduchými a zbavit se příkazů with (u typu Variant totiž tento příkaz v Pascalu nejde použít).
Ukážeme si malý příklad - vybrání buňky D5 v nově vytvořeném sešitu, vepsání textu "ahoj" a nastavení velikosti písma na 20 bodů. Nejdřív ve VBA - kód je přesně tak, jak byl nahrán jako makro, byl jen zbaven nepotřebných příkazů:
|
A teď po převedení do Pascalu/Delphi:
|
Obdobným postupem se podle mě dá poměrně spolehlivě vyřešit 90% problémů při programování Excelu z Delphi. Samozřejmě existují věci, které jako makro nahrát nejdou, ale to nejsou zas tak časté případy.
ZávěrMožná se vám zdá, že článek toho moc neříká. Ale ze své zkušenosti mohu potvrdit, že prohlížeč objektů a nahrávání maker jsou vcelku dostatečným pomocníkem při ovládání MSO z Delphi. To je také důvodem, proč jsem v tomto článku neuváděl více konkrétních postupů či příkladů - domnívám se totiž , že na řešení většiny úloh, na které narazíte, přijdete s výše uvedenými postupy určitě stejně rychle sami.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007