Office automatizácie pomocou Visual C++

Preklady článku Preklady článku
ID článku: 196776 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Tento článok odpovede na bežné otázky týkajúce sa automatizácie spoločnosti Microsoft Úrad z Visual C++.

DALSIE INFORMACIE

Obsah

  1. Čo je automatizácia?
  2. Já jsem nový na automatizáciu, kde môžete nájsť dobrý zdrojov sa dozvedieť viac?
  3. Existujú rôzne spôsoby, ako môžete použiť automatizáciu?
  4. Čo je COM?
  5. Ako sa pripojiť k spustené inštancie aplikácie balíka Office?
  6. Ako prejsť voliteľné parametre?
  7. Ako chytiť udalosti vystavené aplikácií balíka Office?
  8. Môj automatizácie kód je príliš pomalý. Ako môžem urýchliť veci?
  9. Čo znamenajú tieto obrovské chybové hodnoty, ako je-2147352573 alebo 0x80030002?
  10. Aký je typ knižnice?
  11. Môj automatizácie kód pracoval s Microsoft Excel 95, ale zlyhá s Program Microsoft Excel 97. Prečo?
  12. Prečo nemá aplikácie jsem automatizácia zostať v pamäti po môj program je hotové?
  13. Viem, že to, čo chcem robiť ako používateľ aplikácie Microsoft Office, ale ako to dosiahnem programovo pomocou automatizácie?
  14. Môžete automatizovať vložený aplikácie balíka Microsoft Office?
  15. Ako prístup k mojej vlastnosti dokumentu v dokumente balíka Microsoft Office?

Otázky a odpovede

  1. Čo je automatizácia?

    Automatizácia (predtým OLE) je technológia, ktorá umožňuje Využite funkcií existujúcich programov a začleniť ho do vlastnej aplikácie. Napríklad, môžete využiť spoločnosti Microsoft Word kontroly pravopisu a gramatiky schopností do vašej aplikácie bez toho, aby program Microsoft Word viditeľné pre vašich používateľov. Môžete použiť aj všetky program Microsoft Excel grafov, tlač a údaje analytické nástroje. Toto technológia môže výrazne zjednodušiť a urýchliť vášho rozvoja.
  2. Já jsem nový na automatizáciu, kde môžete nájsť dobrý zdrojov sa dozvedieť viac? Kapitola 24 David Kruglinski "Vnútri Visual C++" (ISBN:1-57231 - 565 - 2) poskytuje všeobecný prehľad, ako aj niektoré skvelé príklady. Tiež, Microsoft Knowledge Base je dobrým zdrojom informácií. Toto článok sám o sebe je dobrý štart a môžete nájsť viac špecifických odkazy v nasledujúcom článku databázy Microsoft Knowledge Base:
    152023 Vyhľadanie zdrojov na štúdiu OLE automatizácie
    Ak uprednostňujete štúdium príkladom, prečítajte si nasledujúci článok v Microsoft Knowledge Base:
    179706 HOWTO použitie MFC automatizovať & vytvoriť/formát programu Excel nový zošit
  3. Existujú rôzne spôsoby, ako môžete použiť automatizáciu?

    Existujú tri základné spôsoby, ako môžete použiť automatizácie: MFC, #import, a C/C ++:

    • S MFC, použiť Visual C++ ClassWizard na generovanie "obal triedy"z Microsoft Office zadajte knižníc. Týchto tried, ako aj iné MFC triedy, napríklad COleVariant, COleSafeArray, COleException, zjednodušiť úlohy automatizácie. Táto metóda je spravidla odporúča viac ako ostatné, a väčšina z Microsoft Knowledge Base príkladoch je použitý MFC.
    • #Import, nové smernice, ktoré sa stali dostupnými s Visual c ++ 5.0, vytvorí VC ++ "inteligentné ukazovatele" z knižnice zadaného typu. Je to veľmi silný, ale často neodporúča z dôvodu odkaz - počítanie problémy, ktoré sa zvyčajne vyskytujú pri použití s Microsoft Kancelárske aplikácie.
    • C/c ++ automatizácie je oveľa ťažšie, ale niekedy potrebné Vyhnite sa zaťaženie s MFC alebo problémy s #import. V podstate ste pracovať s takéto API ako CoCreateInstance() a COM rozhrania napríklad IDispatch a IUnknown.
    Je dôležité poznamenať, že existujú niektoré nepatrné rozdiely medzi Automatizácia z c ++ v porovnaní s obyčajný C, pretože COM bol navrhnutý okolo c ++ triedy. Ďalšie informácie, prečítajte si nasledujúci článok v Microsoft Knowledge Base napríklad C:
    181473 HOWTO: Použitie OLE automatizácie z c aplikácie
  4. Čo je COM?

    Automatizácia je založený na COM Component Object Model (). COM je štandardným softvérom architektúry založený na rozhraní, a navrhnuté tak, aby sa kód rozdelený na samostatné objekty. Myslím, že ako rozšírenie Objekt orientované programovanie (OOP) paradigmy, ale vzťahuje sa na samostatné žiadosti. Každý objekt vystavuje množinu rozhraní a všetky oznámenie objektom, ako napríklad inicializačné, oznámenia, a prenos dát sa deje prostredníctvom týchto rozhraní.

    COM je tiež množinu služieb poskytovaných dynamických knižníc (DLL) inštaluje s operačným systémom. Automatizácia používa mnohí z tých služby. Jedným z príkladov je "Zriaďovacie" službu, ktoré balíky klientska aplikácia vyzýva členské funkcie servera žiadosť je rozhrania a prechádza tých, s ich argumenty na serverovú aplikáciu. Je to objaviť, že servera rozhrania sú vystavené v pamäťovom priestore klienta, ktorý nie je v prípade keď klient je .exe beží v svoj vlastný proces priestor. Radenie tiež dostane návratové hodnoty od servera metód späť cez proces hranice a bezpečne do rúk klienta hovor. Existujú mnoho ďalších služieb nevyhnutné automatizácie, ktoré poskytuje rôznymi knižnicami COM. Zdroje informácií o tých zahŕňajú "Vnútri Ole - Second Edition" podľa Kraig Brockschmidt, ISBN 1-55615-843-2, "Vnútri COM" Autor Dale Rogerson - ISBN 1-57231-349-8 a "automatizácia Programmer's Reference,"ISBN 1-57231-584-9.
  5. Ako sa pripojiť k spustené inštancie aplikácie balíka Office?

    Použite GetActiveObject() API. Automatizačné servery zaregistrovať v HNILOBY (spustenej tabuľke objektov), cez RegisterActiveObject() API. Automatizácia klientov môžete získať na prevádzkové stupňa s kódom ako napríklad:
          // 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: Ak existuje viacero inštancií spustená aplikácia balíka Office, ktorý chcete pripojiť, ste len bude schopné pripojiť na prvý výskyt, ktorý bol zahájený pomocou GetActiveObject() API.

    Teoreticky môže inštaláciami hniloby pre každú individuálnu inštanciu, ale Office apps nemáte zaregistrovať sami ak iná inštancia je už v hniloby pretože prezývka pre seba je vždy rovnaký (to nemohol byť odlíšené mimochodom). To znamená, že nie je možné pripojiť k akéhokoľvek stupňa s výnimkou pre prvý. Avšak, pretože Office apps tiež zaregistrovať svoje dokumenty v hniloby, môžete úspešne pripojiť k ostatné in?ítanci?? pod??a Iterácia hniloby hľadáte konkrétny dokument, s nimi spojené, a potom dostať objektu Application z nej. Existuje niektoré kód v nasledujúcom článku databázy Microsoft Knowledge Base pre Iterácia hniloby a hľadáte názov dokumentu:
    190985 HOWTO: Získajte IDispatch programu Excel alebo dokumentu programu Word Z OCX
    Nebude musíte urobiť pre program PowerPoint, pretože nie je jedno- stupňa žiadosti; môžete mať iba jednu inštanciu to beží.
  6. Ako prejsť voliteľné parametre?

    Niektoré metódy majú "dobrovoľná" parametre. V jazyku Visual Basic, môžete Mimochodom vynechajte ich pri volaní metódy. Avšak pri volaní s Visual C++, budete musieť prejsť osobitných VARIANT ktorých .vt pole je VT_ERROR, a .scode pole je DISP_E_PARAMNOTFOUND. to je:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    To je naozaj to, čo robí jazyka Visual Basic práci.
  7. Ako chytiť udalosti vystavené aplikácií balíka Office?

    V podstate implementujete udalosť rozhrania chcete chytiť ( "Výlevky"), a nastavenie poradný pripojenie s uplatňovaním ( "zdroj"). Tento článok vám dáva podrobné príklady Program Microsoft Word:
    183599 HOWTO: Chytiť udalosti aplikácií Microsoft Word97 pomocou VC ++
    Vo všeobecnosti setup poradný pripojenie, dostanete servera IConnectionPointContainer a volať FindConnectionPoint() s IID z udalosť rozhranie. To vám dáva IConnectionPoint rozhranie a všetko, čo zostáva, je hovor Advise() s inštanciu of your event rozhranie. Server bude potom hovor späť prostredníctvom tohto rozhrania pri tieto udalosti nastanú.
  8. Môj automatizácie kód je príliš pomalý. Ako môžem urýchliť veci?

    Bežnou príčinou rýchlosť problémy s automatizácie je s opakované čítanie a písanie údajov. To je typické pre program Excel automatizácie klientov. Avšak, väčšina ľudí nie sú vedomí toho, že tieto údaje môžu byť zvyčajne písomné alebo čítať všetko raz použitím SAFEARRAY. Pozri nasledujúce Microsoft Články databázy Knowledge Base pre viac informácií a informatívne príklady:
    186120 HOWTO: Použite MFC automatizovať Excel a vypĺňať rozsah s poľom
    186122 HOWTO: Použite MFC na automatizáciu Excel & získať pole z rozsahu
    179706 HOWTO: Použite MFC automatizovať Excel a vytvoriť/formát nový zošit
    Tiež je dôležité zdôrazniť, že pomocou Schránky môžete niekedy zlepšiť výkon. Napríklad, môžete skopírovať údaje na schránky, potom použitie automatizácie povedať server prilepiť. Alebo vice- Naopak; informovať server kopírovať do schránky a prilepiť do vášho aplikácia.
  9. Čo robiť tieto obrovské chybové hodnoty, ako napríklad-2147352573 alebo 0x80030002 znamená?

    Tieto hodnoty sú známe ako HRESULTs a sú definované v súbore winerror.h. V čísla sú tak veľké, pretože prvý bit predstavuje či to je výsledkom chyby. Môžete použiť pomôcku ErrLook.Exe, ktorý prichádza s Visual C++ preložiť tieto čísla do zmysluplnejšie popisy.

    Ak chcete pomocou programovania získať popis chyby, môžete môžete použiť FormatMessage() API. Pozri tieto znalosti Microsoft Základné predmety pre viac informácii a príkladov použitia FormatMessage():
    186063 INFO: Preklad automatizácie chyby pre VB/VBA
    122957 Výberový súbor: Decode32 a Decode16 OLE chybový kód Decoder nástroje
    POZNÁMKA: Ak používate Visual C++ 6.0 a máte premenná obsahujúce túto hodnotu v okne okno sledovania ladenia, pripojiť ", hr" (bez úvodzoviek) tak, aby boli Visual C++ preložiť ju pre vás!
  10. Aký je typ knižnice?

    Knižnica typov je podobný súbor C/c ++ hlavičky. Obsahuje rozhrania, metódy a vlastnosti, ktoré server publikovanie. Môžete zobraziť knižnicu typov zobrazovača objekt OLE/COM (Oleview.exe), prichádza s Visual C++. Tu je zoznam typ knižnice názvy pre 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. Môj automatizácie kód pracoval s Excel 95, ale zlyhá s Excel 97. čo sa deje?

    Objektový model programu Excel vykonané významná zmena z verzie 95 na 97. Excel 95 implementované všetky svoje metódy a vlastnosti v jedinom implementácia IDispatch. To znamenalo, že často si mohol zavolať metódy určený pre objekt X, objekt Y. To nebol dobrý dizajn, Takže Office 97, každý objekt má svoje vlastné samostatné Idispatch implementácia. To znamená, že ak sa spýtate pre metódu alebo vlastnosť z objekt x z samostatný objekt Y, dostanete chyba 0x80020003, -2147352573, "Člen nebol nájdený." Chcete vyhnúť tejto chybe, budete musieť urobiť istí, že podkladové rozhrania IDispatch vás robia vyžaduje od je sématicky správne. Pozri tieto znalosti Microsoft Základné predmety pre ďalšie informácie:
    172108 HOWTO: Riešenie problémov "Člen not found" 0x80020003 chyba
  2. Uplatňovanie jsem automatizácia zostane v pamäti, po môj program je hotové. čo sa deje?

    Najpravdepodobnejšie je, že to je, pretože ste zabudli uvoľniť získali rozhranie a vy budete musieť sledovať ho. Tu sú niektoré všeobecné návrhy a vecí, ktoré vyzerá na:

    • Ak používate #import, je veľmi pravdepodobné, že by mohol byť spustený do jedného z referenčných počítanie chýb s ním spojené. Často krát chyby môžu byť pracovnými okolo, ale zvyčajne sa to radšej použite jednu Automatizácia metód. #Import nefunguje dobre s aplikáciami balíka Office, pretože jeho typ knižnice a používanie sú pomerne zložité. Tiež sú ťažké takéto referenčné počítanie problémy sledovať, pretože veľa úrovni rozhrania COM hovory sú zákulisná pri použití #import.
    • Skontrolujte, ak voláte akejkoľvek metódy, ako sú napríklad otvoriť alebo nová, návratnosti IDispatch * (LPDISPATCH), a ignorovanie návrat hodnota. Ak ste, potom sa zriekli toto vrátený rozhranie a bude musieť zmeniť váš kód tak, že uvoľníte keď č naďalej potrebné.
    • Postupne komentár sa oddiely váš kód, kým sa problém zmizne a potom ho pridajte späť uvážlivo na sledovať kde problém sa začína.
    • Všimnite si, že niektoré aplikácie zostane spustená, ak používateľ má „dotkla"žiadosti. Ak nastane táto situácia, kým sú automatizácia, potom uplatňovanie pravdepodobne zostane, potom beží. V Kancelárske aplikácie mať "UserControl" vlastnosť na uplatňovanie objekt, ktorý ste môžu čítať a zapisovať na zmenu tohto správania.
    • Tiež niektoré aplikácie bude rozhodnúť o prerušení beží ak dostatok Vyskytla sa používateľské rozhranie "akcia". Ak sú zamýšľajúcich aplikácia mohla skončiť, potom zavolať svoje Quit() metódu o uplatňovaní objekt. Program Word bude vypnutie bez ohľadu na svoj odkaz počítať pri Ukončite sa nazýva. To nie je očakávané COM správanie. Excel, však bude správne len skrývať sama ale pobytu beží až do všetkých nevyrovnaných rozhrania sú uvoľnené. Vo všeobecnosti by prepustiť všetky vynikajúce odkazy a len hovor Quit() ak zamýšľate uplatňovanie skončiť.
  3. Viem, že to, čo chcem robiť ako úrad žiadosť užívateľa, ale ako to dosiahnem programovo prostredníctvom automatizácie?

    Čo máte záujem je čo objekty, metódy a vlastnosti môžete musieť použiť. Najlepší spôsob, ako naučiť sa pohybovať objektu vzory Word, Excel a Powerpoint, založené na čo chcete robiť ako používateľ, je Ak chcete použiť záznam makra. Stačí zvoliť Macro\ zaznamenať nové makro z Ponuka Nástroje, vykonať úlohu máte záujem, potom vyberte Macro\ „zastaviť nahrávanie. ” Až budete hotoví nahrávanie, vyberte Macro\Macros z ponuky Nástroje vyberte makra môžete zaznamenané, a potom kliknite na tlačidlo Upraviť. To vás vezme na vygenerovaný kód VBA, ktorý bude splnenie úlohy, ktoré ste zaznamenali. Majte na pamäti, zaznamenané makro zvyknutý byť najlepšie možné kód vo väčšine prípadov, ale je to robí veľmi dobre na rýchle príklad.
  4. Môžete automatizovať vložený aplikácie balíka Office?

    Absolútne. Trik je dostať IDispatch ukazovateľ: to je uvedený v Visual C++ technické poznámku 39 (TN039). Pozri nasledujúce Microsoft Článok databázy Knowledge Base obsahuje podrobný napríklad:
    184663 HOWTO: Vložiť a automatizovať hárku programu Microsoft Excel S MFC
  5. Ako prístup k mojej vlastnosti dokumentu v dokumente balíka Office?

    Vlastnosti dokumentu sú prístupné prostredníctvom automatizácie, alebo priamo prostredníctvom IPropertyStorage. Nasledovné články databázy Microsoft Knowledge Base preukázať každej metódy:
    179494 HOWTO: Použiť automatizáciu na načítanie vstavané vlastnosti dokumentu
    186898 HOWTO: Čítať vlastnosti kŕmnych dokumentu priamo s VC ++

Vlastnosti

ID článku: 196776 - Posledná kontrola: 19. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • 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
Kľúčové slová: 
kbsweptvs2008 kbautomation kbmt KB196776 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:196776

Odošlite odozvu

 

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