Office automatizace pomocí aplikace Visual C++

Překlady článku Překlady článku
ID článku: 196776 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek poskytuje odpovědi časté otázky týkající se automatizace společnosti Microsoft Office z aplikace Visual C++.

Další informace

Obsah

  1. Co je automatizace?
  2. Jsem nový automatizace, kde můžete najít dobré zdroje další?
  3. Existují různé způsoby lze použít automatizace?
  4. Co je COM?
  5. Jak připojit k instanci spuštěné aplikace sady Office?
  6. Jak předat nepovinné parametry?
  7. Jak zachytit události, které jsou vystaveny v aplikacích sady Office?
  8. Kód automatizace je příliš pomalý. Jak můžete urychlit věci tak?
  9. Co znamenají tyto velké chybové hodnoty, jako například-2147352573 nebo 0x80030002?
  10. Co je knihovna typů?
  11. Automatizace kód pracoval s Microsoft Excel 95, ale nedaří se Aplikace Microsoft Excel 97. Proč?
  12. Proč aplikaci I jsem automatizace zůstávají v paměti po program je dokončena?
  13. Vím, že chcete provádět jako uživatel aplikace Microsoft Office, ale Jak lze provést programově pomocí automatizace?
  14. Můžete automatizovat vložené aplikace sady Microsoft Office?
  15. Přístupu mé vlastnosti dokumentu v dokumentu sady Microsoft Office

Otázky a odpovědi

  1. Co je automatizace?

    Automatizace (dříve automatizace OLE) je technologie, která umožňuje využívat výhod funkce existujících aplikací a začlenit ji do vlastní aplikace. Můžete například využít Microsoft Pravopisu a gramatiky kontrolu do aplikace bez viditelných uživatelům aplikace Microsoft Word. Můžete použít i všechny aplikace Microsoft Excel grafů, tisk a data analytické nástroje. To technologie může značně zjednodušit a urychlit vývoj.
  2. Jsem nový automatizace, kde můžete najít dobré zdroje další? Kapitola 24 David Kruglinski "Uvnitř Visual C++" (ISBN:1-57231 - 565 - 2) poskytuje obecný přehled, jakož i některé skvělé příklady. Také znalostní báze Microsoft Knowledge Base je dobrým zdrojem informací. To článku samotném je dobrý start a můžete nalézt podrobnější odkazy v následujícím článku znalostní báze Microsoft Knowledge Base:
    152023 Umístění prostředků automatizace OLE studie
    Pokud dáváte přednost učení podle příkladu, naleznete v následujícím článku Microsoft Knowledge Base:
    179706 POSTUPY použití MFC pro automatizaci aplikace Excel & vytvořit či formátovat nový sešit
  3. Existují různé způsoby lze použít automatizace?

    Existují tři základní způsoby použití automatizace: MFC, #import, a C/C++:

    • MFC pomocí aplikace Visual C++ ClassWizard generovat obálky" knihoven typů tříd"ze sady Microsoft Office. Tyto třídy jako i jiných tříd MFC, jako je například COleVariant, COleSafeArray, COleException, zjednodušují úlohy automatizace. Tato metoda je obvykle se doporučuje nad ostatními a většina Microsoft Příklady znalostní báze Knowledge Base pomocí MFC.
    • #Import, nové směrnice, které byly s Visual C++ verze 5.0, vytvoří VC ++ "Inteligentní ukazatele" z knihovny zadaného typu. Je velmi výkonné, ale často nedoporučuje z důvodu reference - počítání problémy, které obvykle dochází při použití s Microsoft Aplikace sady Office.
    • C/C++ automatizace je mnohem obtížnější, ale někdy nezbytné zamezení zatížení s MFC nebo problémy s #import. V podstatě je Práce s těchto rozhraní API CoCreateInstance() a COM rozhraní jako rozhraní IDispatch a IUnknown.
    Je důležité si uvědomit, že jsou některé drobné rozdíly mezi Automatizace z C++ ve srovnání s obyčejný C, protože bylo navrženo COM Třída jazyka C++. Další informace naleznete v následujícím článku Microsoft Knowledge Base C například:
    181473 POSTUPY: Použití automatizace OLE z aplikace c
  4. Co je COM?

    Automatizace je založena na modelu COM (Component Object Model). COM je standardní softwarové architektury založené na rozhraní a navrženy tak, aby Kód oddělení do samostatné objekty. Si jej představit jako rozšíření z objektu orientované programování (OOP) paradigma, ale pro samostatné aplikace. Každý objekt poskytuje sadu rozhraní a všechny objekt, například inicializaci, oznámení, sdělení a přenos dat se děje prostřednictvím těchto rozhraní.

    COM je také sada služeb poskytovaných dynamických knihoven (DLL) nainstalován s operačním systémem. Automatizace používá mnoho těch služby. Jedním příkladem je "Seřaďovací" služby, které balíčky volání funkce členů serveru klientské aplikace aplikace společnosti rozhraní a na ty s jejich argumenty, předá serverové aplikace. Umožňuje zobrazit, že jsou rozhraní serveru vystaveny v paměťovém prostoru klienta, který není v případě při Klient je spuštěna ve vlastním prostoru procesu s příponou EXE. Meziprocesové předávání také získává vrácené hodnoty ze serveru metody zpět přes proces hranice a bezpečně do rukou volání klienta. Existují mnoho dalších služeb základní automatizace, které jsou k dispozici různé knihovny COM. Zdroje informací o těch, které zahrnují "Uvnitř Ole - druhé vydání" podle Kraig Brockschmidt, ISBN 1-55615-843-2, "Uvnitř COM" podle Dale Rogerson - ISBN 1-57231-349-8 a "automatizace Programmer's Reference"ISBN 1-57231-584-9.
  5. Jak připojit k instanci spuštěné aplikace sady Office?

    Pomocí GetActiveObject() rozhraní API. Automatizační servery zaregistrovat v HNILOBY (spuštěný objekt tabulka), via RegisterActiveObject() rozhraní API. Automatizace klientů můžete získat například na spuštěnou instanci s kódem:
          // Translate server ProgID into a CLSID. ClsidFromProgID
          // gets this information from the registry.
          CLSID clsid;
          CLSIDFromProgID(L"Excel.Application", &clsid);  
    
          // Get an interface to the running instance, if any..
          IUnknown *pUnk;
          HRESULT hr = GetActiveObject(clsid, NULL, (IUnknown**)&pUnk);
    
          ASSERT(!FAILED(hr));
    
          // Get IDispatch interface for Automation...
          IDispatch *pDisp;
          hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDisp);
          ASSERT(!FAILED(hr));
    
          // Release the no-longer-needed IUnknown...
          pUnk->Release();
    
    						
    POZNÁMKA:Pokud existuje více instancí spuštění aplikace systému Office, kterou chcete připojit, pouze bude možné připojit k první instanci, která byla spuštěna pomocí rozhraní API GetActiveObject().

    Teoreticky můžete iterovat hniloby pro každé jednotlivé instance, ale aplikace sady Office není zaregistrovat jiná instance je-li již v hniloby zástupný název pro samotný je vždy stejný (it nemůže být rozlišující přesto). To znamená, že se nelze připojit k s výjimkou pro první žádné instance. Ale protože aplikacím sady Office také registrovat své dokumenty hniloby, můžete úspěšně připojit k ostatní instance pomocí iterace hniloby, vyhledat určitý dokument, připojování k němu a poté z něj získání objektu Application. Není k dispozici kód v následujícím článku znalostní báze Microsoft Knowledge Base: Iterace hniloby a hledají název dokumentu:
    190985 POSTUPY: Získat rozhraní IDispatch aplikace Excel nebo dokument aplikace Word soubor OCX
    Nebude nutné provést pro aplikaci PowerPoint, protože je jediný- instance aplikace; Můžete mít pouze jednu instanci spuštěné.
  6. Jak předat nepovinné parametry?

    Některé metody mají "nepovinná" parametry. V jazyce Visual Basic můžete volně vynecháte je při volání metody. Avšak při volání s Visual C++ je nutné projít speciální VARIANTY, jejichž pole .vt je VT_ERROR, DISP_E_PARAMNOTFOUND a .scode pole. To je:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    Je to opravdu co dělá jazyka Visual Basic zmíníme.
  7. Jak zachytit události, které jsou vystaveny v aplikacích sady Office?

    Podstatě implementovat rozhraní události, kterou chcete zachytit (na "Výlevky") a nastavení připojení k poradní s aplikací (na "zdroj"). Článek poskytuje podrobné příklady Aplikace Microsoft Word:
    183599 POSTUPY: Zachycení události aplikace Microsoft obvyklého pomocí VC ++
    Obecně řečeno Chcete-li nastavení poradní připojení, dostanete na serveru IConnectionPointContainer a FindConnectionPoint() s identifikátorem IID o volání rozhraní události. To vám rozhraní IConnectionPoint a doleva je Advise() s instancí události volání rozhraní. Server bude potom volání přes toto rozhraní, kdy Tyto události dojít.
  8. Kód automatizace je příliš pomalý. Jak můžete urychlit věci tak?

    Časté příčiny rychlost problémům při automatizaci je opakované čtení a psaní dat. Toto je typický pro automatizaci aplikace Excel Klienti. Avšak většina lidí nejsou vědomi, že tato data mohou být obvykle všechny písemné nebo čtení na jednou pomocí pole SAFEARRAY. Viz následující společnosti Microsoft Články znalostní báze Knowledge Base další informace a příklady informativní:
    186120 POSTUPY: Použití automatizace aplikace Excel a vyplňte pole oblast MFC
    186122 POSTUPY: Použití k automatizaci aplikace Excel & získání pole z oblasti MFC
    179706 POSTUPY: Použití automatizace aplikace Excel a vytvořit či formátovat nový sešit MFC
    Je také důležité, že pomocí schránky can Někdy zvýšit výkon. Můžete například kopírovat data schránka, pak použití automatizace ověření pravosti serveru pro vložení. Nebo naopak- naopak; ověření pravosti serveru kopírovat do schránky a vložit do vaší aplikace.
  9. Co dělat, aby tyto velké chybové hodnoty, jako je například-2147352573 nebo 0x80030002 střední?

    Tyto hodnoty jsou známé jako HRESULTs a jsou definovány ve winerror.h. Na čísla jsou tak velké, protože první bit představuje, zda ji je výsledkem chyba. Můžete použít nástroj ErrLook.Exe, který je součástí Visual C++ přeložit do smysluplné popisy těchto čísel.

    Chcete-li programově získat popis chyby, které pomocí rozhraní API FormatMessage(). Viz následující znalosti společnosti Microsoft Základní články Další informace a příklady použití FormatMessage():
    186063 INFORMACE: Překlad automatizace chyby pro VB/VBA
    122957 Ukázka: Decode32 a Decode16 OLE kód chyby dekodér nástroje
    POZNÁMKA:: Připojit Pokud používáte Visual C++ 6.0 a mít proměnnou obsahující tato hodnota v okně kukátka ladění, ", hr" (bez uvozovek) k němu mít Visual C++ za vás překlady!
  10. Co je knihovna typů?

    Knihovny typů se podobá souboru záhlaví C/C++. Obsahuje rozhraní, metody a vlastnosti, které je publikování serveru. Je možné Zobrazit typ knihovny pomocí prohlížeče objektů OLE a modelu COM (Oleview.exe), součástí aplikace Visual C++. Zde je seznam názvů souborů typ knihovny pro Microsoft Office 95, 97 a 2000:
    
           Office Application      | Type library
           ------------------------+----------------
           Word 95 and prior       | wb70en32.tlb
           Excel 95 and prior      | xl5en32.olb
           Powerpoint 95 and prior | Powerpoint.tlb
           Access 95 and prior     | msaccess.tlb
           Binder 95               | binder.tlb
           Schedule+               | sp7en32.olb
           Project                 | pj4en32.olb
           Team Manager            | mstmgr1.olb
           Word 97                 | msword8.olb
           Excel 97                | excel8.olb
           Powerpoint 97           | msppt8.olb
           Access 97               | msacc8.olb
           Binder 97               | msbdr8.olb
           Graph 97                | graph8.olb
           Outlook 97              | msoutl8.olb
           Outlook 98              | msoutl85.olb
           Word 2000               | msword9.olb
           Excel 2000              | excel9.olb
           Powerpoint 2000         | msppt9.olb
           Access 2000             | msacc9.olb
           Outlook 2000            | msoutl9.olb
           Word 2002               | msword.olb
           Excel 2002              | excel.exe
           Powerpoint 2002         | msppt.olb
           Access 2002             | msacc.olb
           Outlook 2002            | msoutl.olb 
    
    
    						
  1. Automatizace kód pracoval s Excel 95, ale dojde v aplikaci Excel 97. Co se děje?

    Objektový model aplikace Excel provedeny významné změny od verze 95 97. Aplikace Excel 95 implementovány všechny metody a vlastnosti v jednom implementace IDispatch. To znamenalo, že často nelze volat metody objektu X, z objektu y určena. To nebyl dobrý design, takže v sadě Office 97, každý objekt má vlastní samostatný Idispatch implementace. To znamená, že pokud žádáte pro metodu nebo vlastnost z objekt x z Y, samostatný objekt se zobrazí chybová zpráva 0x80020003, -2147352573, "Člen nebyl nalezen." Chcete-li se této chybě vyhnout, je nutné se Ujistěte se, že zadáváte základní rozhraní IDispatch volá z je sémanticky správné. Viz následující znalosti společnosti Microsoft Základní články Další informace:
    172108 POSTUPY: Odstraňování "Člen nebyl nalezen.", 0x80020003 chyba
  2. Aplikace I jsem automatizace zůstane v paměti po program dokončeno. Co se děje?

    Nejpravděpodobnější, je to proto, že jste zapomněli vydání získaných rozhraní a je nutné ji sledovat. Zde jsou některé obecné návrhy a hledá věci:

    • Používáte-li #import, je velmi pravděpodobné, že může být spuštěn, do jednoho počítání odkazů chyb, které s ním spojené. Často časy možné chyby kolem pracovat, ale obvykle je upřednostňovaný použít jednu jiné metody automatizace. #Import nefunguje dobře s aplikacemi sady Office protože její typ knihovny a použití jsou poměrně složité. Takové problémy inventur odkazu jsou také pevný sledovat, protože jsou velké množství volání úroveň rozhraní COM zmíníme při použití #import.
    • Zkontrolujte, pokud voláte libovolné metody, jako je například otevření nebo nový, které vrací rozhraní IDispatch * (LPDISPATCH) a ignorování návrat hodnota. Pokud jste, pak vám jsou zrušení vrácené rozhraní a bude nutné změnit kód tak, aby při č uvolnění již nepotřebujete.
    • Postupně komentáře mimo části kódu, dokud nebude problém zmizí a potom ji přidat zpět uvážlivě a sledovat kde problém se spustí.
    • Všimněte si, že některé aplikace zůstane spuštěna, pokud má uživatel "dotyku" aplikace. Pokud tato situace nastane, když jsou automatizace, potom aplikace pravděpodobně zůstane spuštěna později. Na Aplikace sady Office mají vlastnost "usercontrol" aplikace objekt, který je mohou číst či zapisovat toto chování změnit.
    • Také některé aplikace rozhodne zůstat, pokud je dostatek "akcí" uživatelského rozhraní došlo. Pokud jsou hodlajících aplikaci ukončíte, potom volat jeho metody Quit() aplikace objekt. Vypnutí budou slova bez ohledu na jeho odkaz počítat při Ukončení se nazývá. Toto není očekávané chování COM. Aplikace Excel však bude správně pouze skrýt sám však zůstanou spuštěna až do všech zbývajících rozhraní jsou vydávány. Obecně by měly uvolnit vše nevyřízené odkazy a volání pouze Quit(), pokud máte v úmyslu Ukončete aplikaci.
  3. Vím, že chcete provádět jako uživatel aplikace sady Office, ale jak se to programově pomocí automatizace?

    Máte zájem je, jaké objekty, metody a vlastnosti je potřeba používat. Nejlepší způsob jak procházet modely objektu Word, Excel a Powerpoint, na základě toho, co chcete provést jako uživatel, je použít záznam makra. Stačí zvolit z Macro\ "Záznam nového makra" Spustit úlohu, které vás zajímají, v nabídce Nástroje a pak zvolte Macro\ 'zastavit nahrávání." Po dokončení nahrávání, zvolte Macro\Macros z nabídky Nástroje vyberte makro, které jste si poznamenali, a pak klepněte na Upravit. Tím přejdete na generovaný kód jazyka VBA, které bude možné provést úloh, které jste si poznamenali. Mějte zaznamenané makro nebude nejlepší možné kód ve většině případů, ale jeho nemá velmi dobře rychlým Příklad.
  4. Můžete automatizovat vložené aplikací sady Office?

    Naprosto. Vtip je získání ukazatele rozhraní IDispatch: Toto je uveden v Visual C++ Technická poznámka 39 (TN039). Viz následující společnosti Microsoft Článek znalostní báze Knowledge Base podrobný Příklad:
    184663 POSTUPY: Vložení a automatizovat listu aplikace Microsoft Excel S MFC
  5. Přístupu mé vlastnosti dokumentu v dokumentu sady Office

    Vlastnosti dokumentu jsou přístupné prostřednictvím automatizace, nebo přímo prostřednictvím IPropertyStorage. Každá metoda prokázat, v následujících článcích znalostní báze Microsoft Knowledge Base:
    179494 POSTUPY: Použití automatizace načíst předdefinované vlastnosti dokumentu
    186898 POSTUPY: Číst vlastnosti složeného dokumentu přímo s VC ++

Vlastnosti

ID článku: 196776 - Poslední aktualizace: 23. dubna 2011 - Revize: 9.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
Klíčová slova: 
kbsweptvs2008 kbautomation kbmt KB196776 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:196776

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com