Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Súhrn

Tento článok obsahuje často kladené otázky o Microsoft Office automatizácie z Visual C++.

Ďalšie informácie

Obsah

  1. Čo je Automatizácia?

  2. Som nový na automatizáciu, kde nájdete dobré zdroje ďalšie?

  3. Existujú iné 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 je to úlovok udalosti vystavené aplikácií balíka Office?

  8. Môj automatizácie kód je príliš nízky. Ako môžem urýchliť veci?

  9. Čo znamenajú tieto hodnoty veľké chyby, 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 dokončení sa program?

  13. Viem, čo chcem robiť ako používateľ aplikácie Microsoft Office, ale ako to urobiť tak programovo pomocou automatizácie?

  14. Môžete automatizovať vložený aplikácie Microsoft Office?

  15. Ako získať prístup k mojej vlastnosti dokumentu v dokumente programu 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 používateľov. Môžete použiť aj všetky program Microsoft Excel grafov, tlač a údaje analytické nástroje. Táto technológia môže výrazne zjednodušiť a zrýchliť vývoj.

  2. Som nový na automatizáciu, kde nájdete dobré zdroje ďalšie? Kapitolu 24 David Kruglinski "vnútri Visual c++" (ISBN: 1-57231-565 - 2) poskytuje všeobecný prehľad, ako aj niektoré veľké príklady. Microsoft Knowledge Base, je dobré zdroj informácií. Tento článok je dobrý štart a môžete nájsť viac špecifických odkazy v nasledujúcom článku databázy Microsoft Knowledge Base:

    Vyhľadanie zdrojov na štúdiu OLE automatizácieAk napríklad chcete učenia, prečítajte si nasledujúci článok v databáze Microsoft Knowledge Base:

    HOWTO použitie MFC automatizovať Excel a vytvoriť/formát nový zošit

  3. Existujú iné 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 a C++:

    • S MFC, použiť Visual C++ ClassWizard na generovanie "obal triedy" z Microsoft Office zadajte knižníc. Tieto triedy, ako aj iné MFC triedy, napríklad COleVariant, COleSafeArray, COleException, zjednodušiť úlohy automatizácie. Tento postup sa zvyčajne odporúča ostatných a väčšina príklady databázy Microsoft Knowledge Base pomocou 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 odkaz - inventúry problémy, ktoré sa zvyčajne vyskytujú pri použití aplikácie Microsoft Office.

    • 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ú mierne 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 databázy Microsoft Knowledge Base napríklad C::

    HOWTO: použitie OLE automatizácie z C aplikácie

  4. Čo je COM? Automatizácia je založený na Component Object Model (COM). COM je štandardným softvérom architektúry založený na rozhraní, a navrhnuté tak, aby sa kód rozdelený na samostatné objekty. Si ju ako rozšírenie objekt orientované programovanie (OOP) paradigmy, ale vzťahuje samostatné aplikácie. Každý objekt vytvára množina rozhraní a všetku komunikáciu na objekt, napríklad Inicializácia, oznámenia a prenos sa deje prostredníctvom týchto rozhraní. COM je tiež množinu služieb knižníc s dynamickým prepojením (DLL) inštaluje s operačným systémom. Automatizácia používa mnohí z týchto služieb. 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 zdá sa, že servera rozhrania sú vystavené v pamäti klienta, ktorý nie je v prípade, keď klient je .exe v svoj vlastný proces priestor. Radenie tiež dostane hodnoty od servera metód späť cez proces hranice a bezpečne do rúk klienta hovor. Existuje mnoho ďalších služieb nevyhnutné na automatizáciu, ktoré poskytujú rôzne knižnice COM. Zdroje informácií o tie zahŕňajú "Prvku Ole - Second Edition" Kraig Brockschmidt, ISBN 1-55615-843-2 "V COM" Dale Rogerson - ISBN 1-57231-349-8, a "Odkaz na automatizáciu programátor" ISBN 1-57231-584-9.

  5. Ako sa pripojiť k spustené inštancie aplikácie balíka Office? Pomocou GetActiveObject() API. Automatizácia servery zaregistrovať v hniloby (systém objektu tabuľky) pomocou 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 sa chcete pripojiť, len sa pripojiť najprv, ktorý bol spustený pomocou GetActiveObject() API. Teoreticky môže inštaláciami hniloby pre každú individuálnu inštanciu, ale aplikácie Office 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é rovnako). Znamená to, ktoré nie je možné pripojiť k žiadnej inštancii okrem prvého. Pretože Office apps tiež zaregistrovať svoje dokumenty v hniloby, môžete úspešne pripojiť k ostatné inštancie pomocou opakujúce hniloby hľadáte konkrétny dokument, pripojenie, 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:

    HOWTO: Získajte IDispatch programu Excel alebo dokumentu programu Word z OCXNemusíte urobiť pre program PowerPoint, pretože sa jednorazové žiadosti; môžete mať iba jednu inštanciu systém.

  6. Ako prejsť voliteľné parametre? Niektoré metódy majú "dobrovoľná" parametre. Visual Basic, môžete náhodne vynechať ich pri volaní metódy. Však pri volaní s Visual C++ musíte prejsť špeciálny VARIANT, ktorého .vt je VT_ERROR a .scode je DISP_E_PARAMNOTFOUND. to je:

          // VARIANT used in place of optional-parameters.      VARIANT varOpt;      varOpt.vt = VT_ERROR;      varOpt.scode = DISP_E_PARAMNOTFOUND;

    Je to naozaj robí Visual Basic zákulisia.

  7. Ako je to úlovok udalosti vystavené aplikácií balíka Office? V podstate implementujete udalosť rozhrania chcete úlovok ("zásobník"), a nastavenie odporúčanie spojenia s aplikáciou ("source"). Článok poskytuje príklady pre program Microsoft Word:

    HOWTO: zachytiť aplikácií Microsoft Word97 pomocou VC ++Vo všeobecnosti Setup odporúčanie pripojenie, dostanete servera IConnectionPointContainer a volať FindConnectionPoint() s IID z udalosť rozhranie. To vám dáva IConnectionPoint rozhranie a zostáva, je hovor Advise() s inštanciu of your event rozhranie. Server bude potom hovor späť prostredníctvom tohto rozhrania pri tieto udalosti.

  8. Môj automatizácie kód je príliš nízky. Ako môžem urýchliť veci? Najčastejšou príčinou rýchlosť problémy s automatizácie je s opakované čítanie a zapisovanie údajov. Toto je typické pre program Excel automatizácie klientov. Väčšina ľudí však nie sú vedomí, že tieto údaje možno zvyčajne napísané alebo čítať všetko raz použitím SAFEARRAY. Pozrite si nasledujúci článok databázy Microsoft Knowledge Base viac informácií a informatívne príklady:

    HOWTO: použite MFC automatizovať Excel a zadajte rozsah s poľom

    HOWTO: použite MFC automatizovať Excel a získať pole z rozsahu

    HOWTO: použite MFC automatizovať Excel a vytvoriť/formát nový zošitOkrem toho je potrebné upozorniť, že pomocou schránky môžete niekedy zlepšiť výkon. Môžete napríklad skopírovať údaje do schránky, potom použitie automatizácie povedať server prilepiť. Alebo naopak; informovať server kopírovať do schránky a prilepiť do aplikácie.

  9. Ako tieto veľké hodnôt -2147352573 alebo 0x80030002 znamená? Tieto hodnoty sa nazývajú HRESULTs a sú definované v súbore winerror.h. Čí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ý sa dodáva s Visual C++ preložiť tieto čísla do popisov zmysel. Ak chcete pomocou programovania získať Popis chyby, môžete použiť FormatMessage() API. Prečítajte si nasledujúci článok databázy Microsoft Knowledge Base ďalšie informácie a príklady na použitia FormatMessage():

    INFO: preklad automatizácie chyby pre VB/VBA

    Ukážka: Decode32 a Decode16 OLE chybový kód Decoder nástrojePozná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ť 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++. Nasleduje zoznam súborov typu Knižnica balíka 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á podstatná zmena z verzie 95 na 97. Excel 95 implementované všetky svoje metódy a vlastnosti v jednom implementácia IDispatch. To znamená, ž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 požiadať metódu alebo vlastnosť z objekt X z samostatný objekt Y, dostanete chyba 0x80020003, -2147352573, "člen nebol nájdený." Ak chcete predísť tejto chybe, skontrolujte prídavných správne základné rozhrania IDispatch sa volanie z. Pozrite si nasledujúci článok databázy Microsoft Knowledge Base ďalšie informácie:

    HOWTO: riešenie problémov "Člen not found" 0x80020003 chyba

  2. Aplikácie jsem automatizácia zostane v pamäti, po môj program je hotové. čo sa deje? Pravdepodobne ste zabudli uvoľniť získaný rozhranie a je potrebné ju sledovať. Tu sú niektoré všeobecné návrhy a čo hľadá:

    • Ak používate #import, je veľmi pravdepodobné, že by mohol byť spustený do jedného odkaz počítať chyby priradený. Č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é. Aj tieto problémy inventúry odkaz sa ťažko sledovať, pretože veľa úrovni rozhrania COM hovory zákulisia pri použití #import.

    • Skontrolujte, ak voláte akejkoľvek metódy, napríklad otvoriť alebo nová, vráťte IDispatch * (LPDISPATCH), a ignorovanie návrat hodnota. Sa sa opustiť toto vrátený rozhranie a bude musieť zmeniť kód tak, že správa, že už nepotrebuje.

    • Postupne komentár sa oddiely váš kód, kým sa problém zmizne a potom pridať späť uvážlivo na sledovať kde problém 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 aplikácia pravdepodobne zostane spustený neskôr. Aplikácie balíka Office sa "UserControl" vlastnosť objektu aplikácie, ktoré sa môžu čítať a zapisovať na zmenu tohto správania.

    • Niektoré aplikácie sa tiež rozhodnúť odložiť, systém ak dostatok používateľské rozhranie "akcia". Ak máte v úmysle ukončíte aplikáciu, potom zavolať svoje Quit() metódu objektu aplikácie. Word bude vypnutie bez ohľadu na počet jeho odkazov pri ukončiť. Nie je očakávané COM správanie. Excel však bude správne len skrývať sama ale zostať, kým všetky dlhší rozhrania sú uvoľnené. Vo všeobecnosti by uvoľniť všetky odkazy na dlhší a len hovor Quit() Ak chcete ukončiť aplikáciu.

  3. Viem, čo chcem robiť ako používateľ aplikácie balíka Office, ale ako to urobiť tak programovo prostredníctvom automatizácie? Máte záujem je čo objekty, metódy a vlastnosti musíte použiť. Najlepšie navigácia objektu vzory Word, Excel a Powerpoint, založené na čo chcete robiť ako používateľ, je použiť záznam makra. Stačí zvoliť Macro\ "Záznam nového makra" v ponuke Nástroje, vykonať úlohu máte záujem a potom vyberte Macro\ "Zastaviť nahrávanie." Keď skončíte nahrávanie, vyberte Macro\Macros z ponuky Nástroje, zaznamenané makro vyberte Upraviť. Prejdete na vygenerovaný kód VBA, ktorý bude splnenie úlohy zaznamenané. Majte na pamäti, zaznamenané makro nebude najlepšie možné kód vo väčšine prípadov, ale je to veľmi dobre na rýchle príklad.

  4. Môžete automatizovať vložený aplikácie balíka Office? Úplne. Problém je dostať IDispatch ukazovateľ: to je uvedený v Visual C++ technické Poznámka 39 (TN039). Pozrite si článok databázy Microsoft Knowledge Base obsahuje podrobný napríklad:

    HOWTO: vložiť a automatizovať hárku programu Microsoft Excel s MFC

  5. Ako získať 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. Nasledujúci článok databázy Microsoft Knowledge Base preukázať každej metódy:

    HOWTO: použiť automatizáciu na načítanie vstavané vlastnosti dokumentu

    HOWTO: vlastnosti priamo s VC ++

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×