Ačkoliv na celém světě používají softwarové aplikace sady Microsoft Office miliony uživatelů, jenom zlomek z nich ví, že veškerou interní funkcionalitu, která je dána precizní architektonickou hierarchií objektových struktur a kolekcí, lze s výhodou využívat s cílem provádění těch nejnáročnějších výpočetních úkolů z prostředí externích aplikací.
reklama
Vnější aplikace totiž mohou s jednotlivými programy sady Office komunikovat v procesu, jemuž se říká automatizace. V tomto článku se dozvíte, co se ve skutečnosti za pojmem automatizace Office skrývá, k čemu automatizace slouží a jak vám může pomoci při zvyšování produktivity vaší práce. Kromě představení automatizace nezapomeneme ani na přehled vývojářských nástrojů, které vám mohou podat pomocnou ruku v okamžiku, kdy se rozhodnete vyvíjet své aplikace pomocí platformy Microsoft Office 2007.
Charakteristika automatizace
Automatizace představuje účinnou softwarovou technologii, pomocí níž mohou dvě samostatně stojící aplikace vzájemně navázat komunikační proces a vyměňovat si mezi sebou důležité informace. Automatizace je založena na standardu COM, jenž na základě zapouzdření ukládá veškerou potřebnou funkcionalitu do objektů, z nichž je aplikace ve skutečnosti složena. Objekty mohou vytvářet sady různé složitosti – pokud je takováto sada objektů schopna plnit vymezený pracovní úkol, přičemž je nezávislá od jiných objektových sad, nazýváme ji komponentou. Komponenty jsou, jednoduše řečeno, softwarové součástky, pomocí kterých je možné „poskládat“ i značně sofistikovanou aplikaci.
Aby mohly komponenty mezi sebou vzájemně komunikovat, jsou obdařeny standardizovanými rozhraními, která předepisuje COM. Microsoft Word 2007 a Microsoft Excel 2007, jakožto i další aplikace sady Microsoft Office 2007, implementují komunikační protokol COM, což znamená, že externí aplikace mohou spolupracovat s komponentami a objekty v nich uložených. Ve skutečnosti je každá z aplikací Office 2007 navržena jako hierarchie mnoha objektů, které provádějí komplexní činnosti – od otevírání a ukládání dokumentů přes kontrolu pravopisu, vytváření grafů a tabulek až po volání inteligentních značek a prohledávání databází.
Pokročilí uživatelé a programátoři si mohou od té-které aplikace Office 2007 prostřednictvím automatizace „vypůjčit“ nezbytnou funkcionalitu, která zabezpečí provedení požadované operace. Jestliže kupříkladu potřebujete vypočíst směrodatnou odchylku hodnot základního statistického souboru respondentů, nemusíte algoritmus výpočtu psát sami: Místo toho raději „zavolejte“ aplikaci Excel 2007, nabídněte ji vstupní data a aktivujte náležitou statistickou funkci. Tímto způsobem máte výsledek za okamžik po ruce. Výborné je, že si vystačíte s minimem kódu a dokonce se nemusíte moc zabývat ani algoritmizací, protože Excel sám ví, jak váš požadavek uskutečnit.
Dalším příkladem přínosného využití automatizace smí být kontrola pravopisu, kterou váš textový procesor může svěřit do rukou aplikace Microsoft Word 2007. Když uvážíte, že schopnosti Wordu jsou v tomto směru skutečně robustní, jistě budete s výsledkem spokojeni. A uživatelé vaší aplikace také. Je nasnadě, že existuje široká paleta dalších možných případů užití automatizace Office 2007, které můžete sami prozkoumat. Za předpokladu, že je automatizace využita rozumně, může vám ušetřit spoustu času a signifikantně pozvednout produktivitu vaší práce.
Styl práce automatizace Office 2007 a automatizační modely
Technologie automatizace pracuje na bázi modelu klient-server, v němž působí zpravidla dvě zúčastněné aplikace, přičemž jedna z nich plní požadavky té druhé. Pozici automatizačního serveru zastupuje aplikace sady Microsoft Office 2007, zatímco klientem automatizace je externí aplikace vytvořena obvykle v některém z vyšších programovacích jazyků, které jsou schopné produkovat COM-kompatibilní softwarové jednotky.
Automatizace aplikací sady Microsoft Office 2007 může být uskutečňována pomocí dvou pracovních modelů:
1. Externí automatizační model – v tomto modelu je aplikace sady Microsoft Office 2007 řízena samostatně působící a nezávislou softwarovou aplikací, jejíž programový kód je uložen ve spustitelném (.exe) souboru. Tento typ automatizace je zobrazen na obr. 1.
Obr. 1: Externí automatizační model
2. Interní automatizační model - v tomto modelu je aplikace sady Microsoft Office 2007 ovládána buď za asistence specializovaného nástroje s názvem Záznamník maker, nebo přímo pomocí vestavěného programovacího jazyka Visual Basic pro aplikace (VBA, Visual Basic for Applications), aktuálně ve verzi 6.5. Záznamník maker je uživatelsky přívětivý pomocník, jenž dokáže automatizovat činnosti zaznamenáváním jejich průběhu.
Uživatel jednoduše spustí tohoto softwarového kutila a provede jistou činnost, například vybere příkaz z nabídky, nebo aktivuje nějakou funkci, a Záznamník maker vykonanou operaci převede do podoby makra, tedy procedury jazyka VBA. Zaznamenaný kód makra je možné dále upravovat a přizpůsobovat. Pokročilejší uživatelé a programátoři mohou přímo vytvářet makra zapsáním jejich programového kódu do editoru Visual Basicu pro aplikace. Takto připravený kód se ukládá společně s dokumentem aplikace Office, což znamená, že není převeden do podoby spustitelného souboru. Vytvořená makra mohou být následně volána, přičemž je samozřejmě možné jim předávat vstupní argumenty a zjišťovat jejich návratové hodnoty. Pohled na interní automatizační model přináší obr. 2.
Obr. 2: Interní automatizační model
Automatizace aplikací Microsoft Office 2007 pomocí aplikací .NET
Cílem automatizace jakékoliv aplikace sady Office 2007 je zužitkovat již jednou vytvořený a přístupný programový kód pro dosažení kýženého výsledku. Každá z aplikací Office 2007 je tvořena hierarchickou kolekcí objektů - tyto objekty společně vytvářejí automatizovatelné objektové modely.
Jakmile uskutečníte propojení vaší aplikace s automatizačním serverem, všechny tyto objekty jsou rázem dosažitelné a vy tak můžete volat jejich metody, nastavovat vlastnosti a reagovat na události. Interakce řízené aplikace a aplikace sady Office 2007 na platformě .NET Framework 2.0 je specifická v tom smyslu, že aplikace .NET jako taková není schopna přímo komunikovat s cílovou aplikací Office 2007.
Potíž je v tom, že všechny aplikace .NET jsou řízené společným běhovým prostředím (CLR), a tudíž neumějí přímo pracovat s ryzím nativním kódem, jenž je uložen v COM typových (objektových) knihovnách aplikací Office 2007. Aby mohla aplikace .NET rozeznávat a zpracovávat datové typy, jež jsou uloženy v příslušné typové knihovně jisté aplikace Office 2007, musí disponovat speciální datově-informační vrstvou. Tato vrstva je tvořena typovými metadaty, která mapují (anebo obalují, chcete-li) všechny datové typy COM typové knihovny zvolené aplikace Office 2007. Typová metadata jsou pro každou z aplikací Office 2007 uložena v příslušném primárním sestavení vzájemné spolupráce (PIA, Primary Interop Assembly).
Sada Microsoft Office 2007 obsahuje všechna nezbytná primární sestavení vzájemné spolupráce, stačí je jenom zahrnout do instalace. (Instalaci specifického sestavení PIA můžete provést tak, že v průvodci instalačního procesu označíte volbu „Podpora programovatelnosti v rozhraní .NET“ u zvolené aplikace Office 2007.) Sestavení PIA jsou instalována do mezipaměti sestavení (GAC, Global Assembly Cache), odkud jsou přístupná „vnějšímu světu“.
To znamená, že jakákoliv řízená aplikace se může odkázat na požadované sestavení PIA, které ji nabídne vše potřebné pro nastartování procesu automatizace cílové aplikace Office 2007. Jakmile jsou do projektu aplikace .NET zavedeny reference na sestavení PIA, technologie IntelliSense začne vývojáři nabízet seznamy dosažitelných typů z importovaných jmenných prostorů. Proces pokračuje vytvořením hlavního aplikačního objektu kýžené aplikace Office 2007, jakož i dalších (vnořených) objektů, které slouží na „dálkové“ ovládání této aplikace podle požadavků vývojáře
Zatímco interoperabilita mezi nativními a řízenými datovými typy mezi aplikací .NET a aplikací Office 2007 je vyřešena pomocí PIA sestavení, je nutno dodat, že spolupráci mezi řízeným klientem a nativním serverem za běhu aplikace .NET zabezpečují objekty RCW (Runtime Callable Wrappers). Tyto objekty si můžete představit jako prostředníky, jimiž je vedena vzájemná komunikace mezi řízeným programem a nativní kancelářskou aplikací.
Programovací nástroje pro automatizaci aplikací Microsoft Office 2007
Vývojáři, softwaroví odborníci a IT specialisté, kteří by rádi vytvářeli automatizační řešení pro aplikace sady Microsoft Office 2007, mají k dispozici hned několik užitečných nástrojů. Pro lepší přehlednost můžeme tyto nástroje seskupit do následujících základních kategorií.
1. Nástroje pro externí řízenou automatizaci aplikací Office 2007 pracující na bázi vývojově-exekuční platformy Microsoft .NET Framework 3.5.
Do první skupiny nástrojů můžeme zařadit všechny .NET-kompatibilní vývojové prostředky, které vyhovují společné jazykové specifikaci a společnému typovému systému platformy .NET Framework 3.5. Hlavní nástroje společnosti Microsoft pro podporu programování na platformě .NET Framework 3.5 jsou sdruženy v balíku Visual Studio 2008. Jedná se o Visual Basic 2008, Visual C# 2008 a Visual C++ 2008 (s řízeným a vpravdě inovovaným programovacím jazykem C++/CLI). Visual Studio 2008 počínaje verzí Professional obsahuje náčiní pro budování řešení na platformě Office 2007 – Visual Studio 2008 Tools for Office 2007. Vývojáři tak získávají kolekci projektových šablon, vizuálních návrhářů, softwarových ukázek a svazků elektronické dokumentace.
2. Nástroje pro externí řízenou automatizaci aplikací Office 2007 pracující na bázi vývojově-exekuční platformy Microsoft .NET Framework 2.0.
Jestliže je vaše technologická základna postavena na .NET Frameworku 2.0 a Visual Studiu 2005, pak můžete za účelem automatizace aplikací Office 2007 upotřebit tyto nástroje. Visual Basic 2005, C# 2.0, J# a C++/CLI jsou hlavní programovací jazyky, v nichž můžete psát svá automatizační řešení. Pakliže se rozhodnete zabývat se automatizací aplikací Office 2007 vážněji, nebo budete-li chtít vytvářet ucelená řešení na platformě Microsoft Office, můžete sáhnout po produktu Microsoft Visual Studio 2005 Tools for Office 2007 (respektive Visual Studio 2005 Tools for Office Second Edition či zkráceně VSTO 2005 SE).
Pomocí této sady nástrojů mohou vývojáři navrhovat, vytvářet a nasazovat plně funkční, extensibilní a integrovatelná řešení (doplňky) pro aplikace Word 2007, Excel 2007, Outlook 2007, PowerPoint 2007, Visio 2007 a InfoPath 2007. VSTO 2005 SE je přídavek (add-on), který je pro vymezenou cílovou skupinu IT odborníků zdarma ke stažení na webu společnosti Microsoft (brouzdat můžete na http://msdn2.microsoft.com/en-us/office/default.aspx).
Upotřebit jej mohou majitelé Visual Studia 2005 počínaje verzí Professional a rovněž tak i vývojáři, kteří pracují v prostředí produktu Visual Studio 2005 Tools for Office System. Dodejme, že tento nástroj vám kromě přípravy řízených doplňků pro zmíněné aplikace nabízí mnoho dalších specialit, kupříkladu přizpůsobovaní nové ovládací komponenty s názvem Ribbon (Pás karet) či zhotovování uživatelsky přívětivých podoken úloh (Task Panes). Bohužel, v současné době nedovoluje VSTO 2005 SE pracovat s dokumenty aplikací Word 2007 a Excel 2007 prostřednictvím vizuálního návrháře (tato podpora je tedy dostupná pouze pro starší verze uvedených aplikací).
3. Nástroje pro externí nativní automatizaci aplikací Office 2007. Automatizace aplikací Office 2007 je samozřejmě možná i z nativních programovacích nástrojů, jako je například Visual Basic 6.0, Visual C++ 6.0 a další vývojová prostředí. Proces nativní automatizace se od řízené alternativy liší v implementačních detailech (kupříkladu nativní aplikace nepracují s PIA sestaveními, protože se „domluví“ přímo s COM typovými knihovnami aplikací Office 2007), ovšem principiálně jsou obě technologie víceméně shodné. Ve všeobecnosti se dá říci, že nativní automatizaci aplikací Office 2007 můžete provést za asistence libovolného nástroje, který je schopný vytvářet aplikační projekty založené na standardu COM.
4. Nástroje pro interní nativní automatizaci aplikací Office 2007. Jak již bylo řečeno, vlajkovou lodí společnosti Microsoft v oblasti interní automatizace sady Office 2007 je jazyk Visual Basic pro aplikace verze 6.5. Tento jazyk byl navržen speciálně pro potřeby vnitřní automatizace aplikací Office a můžeme se na něj dívat jako na mladšího brášku Visual Basicu 6.0. Je tedy zřejmé, že VBA patří mezi nativní a nikoliv řízené programovací prostředky pro automatizaci aplikací sady Office 2007. Visual Basic pro aplikace je i v nejnovějším vydání takřka identický se svými předchůdci, kteří byli součástí aplikací Office XP a Office 2003. Zatímco tedy syntakticko-sémantická výbava jazyka VBA je ryze standardní, znatelně se rozšířily řady objektů, které tvoří jádro automatizačních modelů jednotlivých aplikací kolekce Office 2007.
Praktická ukázka externí řízené automatizace aplikace Word 2007
Abychom nezůstali uvězněni pouze v rovině teoretických diskusí, ukážeme vám proces přípravy automatizačního projektu, jehož podstatou bude dálková komunikace s aplikací Word 2007. Naše ukázka bude demonstrovat proces řízené automatizace, pro realizaci kterého jsme si zvolili programovací jazyky Visual Basic 2008, C# 3.0 a C++/CLI. Postupujte prosím takto:
- Založte nový projekt standardní aplikace pro systém Windows (Windows Forms Application) ve vašem oblíbeném programovacím jazyce.
- Vyberte nabídku Project a klepněte na položku Add Reference….
- Ve stejnojmenném dialogovém okně vyberte záložku COM a zde v seznamu Component Name vyhledejte objektovou knihovnu, která je spojena s aplikací Word 2007. Její úplný název zní Microsoft Word 12.0 Object Library (obr. 3).
Obr. 3: Lokalizace zdrojové COM objektové knihovny aplikace Word 2007
Poznámka: V projektu jazyka C++/CLI, který vytvoříte pomocí Visual C++ 2008, je postup pro začlenění reference jiný:
- Otevřete nabídku Project a vyberte poslední příkaz <NázevProjektu> Properties….
- V dialogu Property Pages klepněte na tlačítko Add New Reference….
- Jakmile spatříte okno Add Reference, přepnete se na záložku COM a vyhledejte knihovnu Microsoft Word 12.0 Object Library.
- Ihned jak klepnete na tlačítko OK, odehraje se spousta událostí, z nichž nejvýznamnější jsou dvě: Visual Studio 2008 zjistí, že si přejete pracovat s aplikací Word 2007, a proto vyhledá odpovídající primární sestavení vzájemné spolupráce (PIA), které je uloženo v GAC a odkaz na něj importuje do právě otevřeného projektu.
- Na hlavní formulář umístěte jedno tlačítko s popiskem „Spustit aplikaci Word 2007“.
- Do zpracovatele události Click tlačítka vložte následující řádky zdrojového kódu jazyka Visual Basic 2008:
'Instanciace primárního objektu, který reprezentuje
'aplikaci Word 2007.
Dim obj_Word As New Microsoft.Office.Interop.Word.Application
'Přidání nového dokumentu.
obj_Word.Documents.Add()
'Zviditelnění okna aplikace Word 2007.
obj_Word.Visible = True
'Přenesení zaměření na okno aplikace Word 2007.
obj_Word.Activate()
A to je vše, přátelé! Nyní spusťte testovací aplikaci a zmáčkněte tlačítko na formuláři. Word 2007 se rozeběhne a přivítá vás s čistým dokumentem (obr. 4).
Obr. 4: Spuštění aplikace Word 2007 z externí řízené aplikace je otázkou pár řádek zdrojového kódu
Jemnou obměnou zapsaného kódu můžete místo přidání nového dokumentu otevřít již existující dokument. Vše, co musíte udělat, je zaměnit volání metody Add za metodu Open, jejíž pomocí otevřete kýžený textový dokument:
obj_Word.Documents.Open("D:\Ukázka.docx")
Mluvíme-li o automatizaci aplikací sady Office 2007, pak nesmíme zapomenout na jeden důležitý fakt, který si dříve či později uvědomí každý vývojář: vývoj automatizačních aplikací je nejproduktivnější a současně také nejsnadnější právě v jazyce Visual Basic. Ačkoliv Visual Basic není rozhodně jediným programovacím jazykem, který ovládáme takřka zpaměti (dalšími kandidáty jsou C, C++, C#, C++/CLI a Java), ve vývoji řešení pro Office hraje zcela bez diskusí první housle. Je to zejména proto, že objektové modely Office aplikací byly již od svých prvopočátků projektovány tak, aby je bylo možné ovládat co nejsnadněji právě pomocí jazyka VBA. A jelikož VBA je odnoží Visual Basicu, rychle dojdeme k poznání, že Visual Basic je ve spojení s automatizací Office 2007 tím pravým ořechovým.
Na druhou stranu, jak již bylo řečeno, ovládaní aplikací sady Office 2007 je proveditelné i z jiných .NET-kompatibilních jazyků, jakými jsou C# 3.0 a C++/CLI. Bohužel, specifikace těchto jazyků postrádají některé prvky, které jsou ve Visual Basicu naprostou samozřejmostí. Přestože není naším záměrem se na tomto místě pouštět do sáhodlouhých komparačních polemik, vzpomeňme alespoň jeden z nejmarkantnějších rozdílů. Tím je používání funkcí s volitelnými formálními parametry.
Takovouto funkci můžete v jazyce Visual Basic 2008 (a pochopitelně také ve VBA) aktivovat pouze s těmi parametry, které si přejete použít (případně s vůbec žádnými, pokud tak můžete učinit). C# 3.0 ani C++/CLI si s volitelnými parametry nerozumí, čehož důsledkem je, že v těchto jazycích musí programátoři všem formálním parametrům (byť volitelným) předat jisté výchozí hodnoty.
Takovéto počínání komplikuje zápis programového kódu, jenž se záhy stává hůře čitelný a méně přehledný. S těmito nepříznivými efekty se setkáváme především u těch funkcí, které definují 10 a více formálních parametrů. Schválně, co myslíte, jak by asi vypadal kód jazyka C# 3.0, který je funkčním ekvivalentem výše znázorněného kódu Visual Basicu 2008? Nejspíš takhle:
// Automatizační kód zapsaný v jazyce C# 3.0.
Microsoft.Office.Interop.Word.Application obj_Word =
new Microsoft.Office.Interop.Word.Application();
object VychoziArgument = Type.Missing;
obj_Word.Documents.Add(ref VychoziArgument, ref VychoziArgument,
ref VychoziArgument, ref VychoziArgument);
obj_Word.Visible = true;
obj_Word.Activate();
Všimněte si, že v C# 3.0 musíme explicitně naplnit všechny formální parametry metody Add. Skutečnost, že předávané argumenty jsou pouhými prázdnými hodnotami, dáváme na vědomí definicí odkazové proměnné typu object (jejíž obsah předáváme odkazem pomocí klíčového slova ref), do níž ukládáme inicializační hodnotu, která je specifikována statickou datovou položkou Missing třídy Type ze jmenného prostoru System.
Jste-li příznivci jazyka C++/CLI, zdrojový kód pro vyvolání aplikace Word 2007 bude mít následující podobu:
// Také jazyk C++/CLI si poradí s automatizací aplikace Word 2007.
Microsoft::Office::Interop::Word::Application ^obj_Word =
gcnew Microsoft::Office::Interop::Word::Application();
Object ^VychoziArgument = Type::Missing;
obj_Word->Documents->Add(VychoziArgument, VychoziArgument,
VychoziArgument, VychoziArgument);
obj_Word->Visible = true;
obj_Word->Activate();
Zhodnocení automatizace aplikací Office 2007 z pohledu vývojáře
Na závěr se ještě podívejme na pozitiva a negativa, která s sebou automatizační proces ve spojení s aplikacemi kolekce Office 2007 přináší. Bezesporu největší devizou automatizace je možnost opětovného využití už jednou napsaných a odladěných partií programového kódu, které byly zapouzdřeny do objektů a komponent. Tato takřka nevyčerpatelná studnice funkcionálních prvků je nepochybně rázným přesvědčovacím argumentem pro každého vývojáře. Vždyť který programátor by raději zdlouhavě tvořil kód, když stačí navázat spojení s aplikací Office 2007 a problém vyřešit za několik málo okamžiků? Z tohoto pohledu je automatizace určitě přínosná a vývojáři se na ni mohou stoprocentně spolehnout.
Na druhou stranu, řešení spočívající na pilířích Office 2007 mohou naplno pracovat jenom tehdy, pokud je na cílovém počítači tato softwarová kolekce řádně nainstalovaná. Trhová penetrace produktů sady Office je obecně vysoká, a proto by tato hlavní nevýhoda ve skutečnosti nemusela být až tak tíživá. Vývojář však musí zvážit rovněž náklady na obstarání vývojových nástrojů a v neposlední řadě rovněž i „dobu osvojení“ zvolených nástrojů.
Programování automatizačních řešení na platformě Microsoft Office 2007 nabývá v současnosti na významu, a proto nelze pochybovat o tom, že odborníci na tuto problematiku budou zanedlouho patřit k těm nejžádanějším.