Komunikace s MS Office - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

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 + OLE

Veš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:

uses ComObj;

procedure Ukazka;
var
  V: Variant;
begin
  V := CreateOleObject('Excel.Application');
  V.Visible := True;
  V.Quit;
end;

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 VBA

Informace 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.

Prohlížeč objektů

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í maker

Zní 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ů:

Sub Makro1()
'
' Makro1 Makro
' Makro zaznamenané 29.9.2001, David Majda
'

    Workbooks.Add
    Range("D5").Select
    ActiveCell.FormulaR1C1 = "ahoj"
    With Selection.Font
        .Name = "Arial CE"
        .Size = 20
        ' zde vynechány zbytečné formátovací příkazy
    End With
End Sub

A teď po převedení do Pascalu/Delphi:

procedure Makro1;
var
  V: Variant;
begin
  V := CreateOleObject('Excel.Application');
  V.Visible := True;

  V.Workbooks.Add;
  V.Range['D5'].Select;
  V.ActiveCell.FormulaR1C1 := 'ahoj';
  V.Selection.Font.Name := 'Arial CE';
  V.Selection.Font.Size := 20;

  V.Quit;
end;

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ěr

Mož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.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: