Sažetak

U ovom se članku odgovara na najčešća pitanja vezana uz automatizaciju sustava Microsoft Office iz vizualnog C++.

Dodatne informacije

Tablica sadržaja

  1. Što je automatizacija?

  2. Nova sam u Automatstvu, gdje mogu pronaći dobre resurse da biste saznali više?

  3. Postoje li razni načini na koje mogu koristiti automatizaciju?

  4. Što je COM?

  5. Kako priložiti instancu pokretanja aplikacije sustava Office?

  6. Kako proći neobavezne parametre?

  7. Kako uhvatiti događaje izložene aplikacijama sustava Office?

  8. Moj kod za automatizaciju je prespor. Kako ubrzati poslove?

  9. Što znače te ogromne vrijednosti pogrešaka, kao što su-2147352573 ili 0x80030002, znači?

  10. Što je biblioteka vrsta?

  11. Moj kod za automatizaciju radio je s programom Microsoft Excel 95, ali ne uspijeva s programom Microsoft Excel 97. Zašto?

  12. Zašto se aplikacija koju automatizira ostaje u memoriji nakon dovršetka programa?

  13. Znam što želim učiniti kao korisnik aplikacije Microsoft Office, ali kako to učiniti programatski pomoću automatizacije?

  14. Mogu li automatizirati ugrađenu aplikaciju sustava Microsoft Office?

  15. Kako pristupiti svojstvima dokumenta u dokumentu sustava Microsoft Office?

Pitanja i odgovori

  1. Što je automatizacija? Automatizacija (nekadašnje OLE automatizacija) tehnologija je koja vam omogućuje iskorištavanje funkcionalnosti postojećeg programa i njihovo uključivanje u vlastite aplikacije. Primjerice, mogućnosti provjere pravopisa i gramatike u programu Microsoft Word možete koristiti u aplikaciji bez programa Microsoft Word vidljive korisnicima. Možete čak koristiti i sve alate za kartiranje, ispis i analizu podataka u programu Microsoft Excel. Ova tehnologija može uvelike pojednostavniti i ubrzati vaš razvoj.

  2. Nova sam u Automatstvu, gdje mogu pronaći dobre resurse da biste saznali više? Poglavlje 24 Davida Kruglinskog "Inside Visual C++" (ISBN: 1-57231-565-2) opskrbljuje Opći pregled, kao i neke odlične primjere. Microsoftova baza znanja je i dobar izvor informacija. Ovaj je članak dobar početak, a možete pronaći i više specifičnih referenci u sljedećem članku u Microsoftovoj bazi znanja:

    152023 Pronalaženje resursa za proučavanje OLE automatizacije Ako preferirate učenje na primjer, pročitajte članak u članku iz Microsoftove baze znanja:

    179706 HOWTO korištenje MFC-a za automatizaciju programa Excel & stvaranje/oblikovanje nove radne knjige

  3. Postoje li razni načini na koje mogu koristiti automatizaciju? Na raspolaganju su vam tri osnovna načina korištenja automatizacije: MFC, #import i C/C++:

    • Pomoću MFC-a u programu Visual C++ ClassWizard možete generirati "Classes za omot" iz biblioteka vrsta sustava Microsoft Office. Ove razrede, kao i ostale MFC klase, kao što su COleVariant, COleSafeArray, Coleizuzetak, pojednostavljuju zadatke automatizacije. Ovaj se način obično preporučuje drugim korisnicima, a većina primjera iz Microsoftove baze znanja koristi MFC.

    • #import, nova direktiva koja je postala dostupna u Visual C++ 5,0, stvara VC + + "pametne pokazivače" iz određene biblioteke vrsta. Vrlo je moćan, ali se često ne preporučuje zbog problema s brojanjem reference koji se obično javljaju kada se koriste u aplikacijama sustava Microsoft Office.

    • Automatizacija C/C++ je mnogo teža, ali je ponekad potrebna da se izbjegne iznad glave s MFC-om ili problemi s #import. U suštini radite s takvim API-Jima kao što su CoCreateInstance () i COM sučelja kao što su IDispatch i IUnknown.

    Važno je napomenuti da postoje neke male razlike između automatizacije iz C++ u odnosu na Plain C, jer je COM dizajniran oko C++ razreda. Dodatne informacije potražite u sljedećem članku iz Microsoftove baze znanja za primjer C:

    181473 HOWTO: korištenje OLE automatizacije iz programa C

  4. Što je COM? Automatizacija se temelji na modelu Component Object Model (COM). COM je standarna programska arhitektura bazirana na sučeljima i dizajnirana je da se kod razdvaja u samosadržanim objektima. Razmislite o tome kao o proširenoj paradigmi programiranje (OOP), no primjenjuje se na zasebne aplikacije. Svaki objekt izlaže skup sučelja, a sva komunikacija s objektom, kao što su Inicijalizacija, obavijesti i prijenos podataka, odvija se putem tih sučelja. COM je i skup servisa koje osiguravaju biblioteke dinamičkih veza (DLL-ovi) instalirane u operacijskom sustavu. Automatizacija koristi mnoge od tih servisa. Jedan od primjera jest servis "MARSHALLING", koji sadrži pozive klijentske aplikacije za funkcije Member na sučeljima poslužitelja aplikacija i prenosi one, uz njihove argumente, u poslužiteljsku aplikaciju. Čini se da su sučelja poslužitelja izložena u memorijskom prostoru klijenta, što nije slučaj kada je klijent. exe pokrenut u vlastitom procesnu prostoru. Marštiranje također dobiva povratne vrijednosti iz metoda poslužitelja natrag po granicama procesa i sigurno u ruke klijenta poziva. Postoje mnogi drugi servisi koji su neophodni za automatizaciju koju pružaju različite COM biblioteke. Izvori informacija o tim uvrštavaju "unutar OLE-Second Edition" od Kraig Brockschmidt, ISBN 1-55615-843-2, "Inside COM" by Dale Rogerson-ISBN 1-57231-349-8, i "referenca za automatiziranje programera", ISBN 1-57231-584-9.

  5. Kako priložiti instancu pokretanja aplikacije sustava Office? Koristite API za GetActiveObject (). Poslužitelji za automatizaciju registriraju se u sustavu trulež (pokrenut objekt tablice), pomoću API-ja RegisterActiveObject (). Klijenti za automatizaciju mogu doći na instancu izvođenja s kodom kao što su:

          // 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();

    Pažnja: ako postoji više instanci koje su pokrenute u aplikaciji sustava Office koju želite priložiti, možete je priložiti samo prvoj instanci koja je pokrenuta pomoću API-ja GetActiveObject (). Teoretski, možete ponoviti trulež za svaku pojedinačnu instancu, no aplikacije sustava Office ne registriraju se ako je druga instanca već u TRULEŽU jer je nadimak za sebe uvijek isti (nije ga moguće razlikovati). To znači da ne možete priložiti ni jedan primjer osim prvog. Međutim, budući da aplikacije sustava Office registriraju svoje dokumente u trulež, možete ga uspješno priložiti i u druge instance tako da ponovite trulež u potrazi za određenim dokumentom, prilaganjem na njega, a zatim u njemu dobivate objekt aplikacije. U sljedećem članku iz Microsoftove baze znanja postoji neki kod za iteraciju trulež i traženje naziva dokumenta:

    190985 HOWTO: dohvaćanje IDispatch dokumenta programa Excel ili programa Word iz OKX-a Ne morate to učiniti za PowerPoint jer je to jednoinstanca aplikacija; možete imati samo jednu instancu izvođenja.

  6. Kako proći neobavezne parametre? Neke metode imaju "neobavezne" parametre. U programu Visual Basic možete ih ležerno izostaviti prilikom pozivanja metode. No kada nazovete pomoću programa Visual C++, morate proći specijalnu VARIJANTU čije je polje. VT VT_ERROR, a polje. skode 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 stvarno ono što Visual Basic radi iza scene.

  7. Kako uhvatiti događaje izložene aplikacijama sustava Office? U osnovi implementirate sučelje događaja koje želite uhvatiti ("sudoper") i postavite savjetodavnu vezu s aplikacijom ("izvor"). U sljedećem se članku daju ogledni primjeri za Microsoft Word:

    183599 HOWTO: hvatanje programa Microsoft Word97 aplikacija pomoću VC + + U principu, da biste namjestili savjetodavnu vezu, dobivate web-mjesto Iconnectionpoint, i pozovite FindConnectionPoint () uz IID sučelja događaja. To vam daje sučelje IConnectionPoint i sve što je preostalo jest pozivanje savjeta () s instancom sučelja događaja. Poslužitelj će nakon toga ponovno javiti putem ovog sučelja kada se pojave ti događaji.

  8. Moj kod za automatizaciju je prespor. Kako ubrzati poslove? Uobičajen uzrok problema s brzinama uz automatizaciju jest ponavljanje čitanja i pisanja podataka. To je tipično za klijente za automatizaciju programa Excel. Međutim, većina osoba nije svjesna da se ti podaci obično mogu pisati ili čitati odjednom pomoću sigurnog polja. Dodatne informacije i informativne primjere potražite u sljedećim člancima iz Microsoftove baze znanja:

    186120 HOWTO: korištenje MFC-a za automatizaciju programa Excel i ispunjavanje raspona pomoću polja

    186122 HOWTO: korištenje MFC-a za automatizaciju programa Excel & pribavljanje polja iz raspona

    179706 HOWTO: korištenje MFC-a za automatizaciju programa Excel i stvaranje/oblikovanje nove radne knjige Važno je i naglasiti da se pomoću međuspremnika ponekad može povećati performanse. Primjerice, podatke možete kopirati u međuspremnik, a zatim koristiti automatizaciju da biste poslužitelju rekli da Zalijepi. Ili obratno; Recite poslužitelju da kopira-to-Clipboard i Zalijepi u aplikaciju.

  9. Što znače te ogromne vrijednosti pogrešaka, kao što su-2147352573 ili 0x80030002? Te su vrijednosti poznate kao HRESULTs i definirane su u programu Winerror. h. Brojevi su tako veliki jer prvi dio predstavlja je li to rezultat pogreške. Možete koristiti uslužni program ErrLook. exe koji sadrži Visual C++ za prevođenje tih brojeva u smislene opise. Ako želite programsko nabaviti Opis pogrešaka, možete koristiti API za FormatMessage (). Dodatne informacije i primjere o korištenju FormatMessage () potražite u sljedećim člancima iz Microsoftove baze znanja:

    186063 INFORMACIJE: prijevod pogrešaka automatizacije za VB/VBA

    122957 UZORAK: Alati za dekoder pogreške Decode32 i Decode16 OLEPažnja: Ako koristite visual c++ 6,0 i varijablu koja sadrži tu vrijednost u prozoru za ispravljanje pogrešaka, dodajte ", hr" (bez navodnika) da biste ga mogli prevesti na Visual c++.

  10. Što je biblioteka vrsta? Biblioteka vrsta slična je datoteci zaglavlja C/C++. Sadrži sučelja, metode i svojstva koje poslužitelj objavljuje. Biblioteku vrsta možete pogledati u pregledniku OLE/COM Object Viewer (Oleview. exe) koji se isporučuje s vizualnim C++-om. Ovdje se nalazi popis datoteka biblioteke vrsta za Microsoft Office 95, 97 i 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. Moj kod za automatizaciju radio je s programom Excel 95, ali ne uspijeva s programom Excel 97. Šta se događa? Objektni model za Excel učinio je značajnu promjenu od verzije 95 do 97. Excel 95 provodi sve svoje metode i svojstva u jednoj implementaciji IDispatch. To je značilo da često možete nazivati metode namijenjene objektu X, od objekta Y. To nije bio dobar dizajn, pa u sustavu Office 97 svaki objekt ima zasebnu implementaciju IDispatch-a. To znači da ako tražite način ili svojstvo iz objekta X iz zasebnog objekta Y, prikazat će vam se pogreška 0x80020003,-2147352573, "član nije pronađen." Da biste izbjegli tu pogrešku, morate provjeriti je li u podlozi IDispatch sučelja iz kojih se poziva naziv semantički ispravna. Dodatne informacije potražite u sljedećim člancima iz Microsoftove baze znanja:

    172108 HOWTO: otklanjanje poteškoća "član nije pronađen", 0x80020003 pogreška

  2. Aplikacija koju automatizira ostaje u memoriji nakon dovršetka programa. Šta se događa? Najvjerojatnije, to je zato što ste zaboravili objaviti stečeno sučelje i morat ćete ga pronaći. Slijede neki opći prijedlozi i nešto što treba tražiti:

    • Ako koristite #import, vrlo je vjerojatno da možete pokrenuti neku od onih koje su povezane s njima. Često se mogu raditi o kukcima, ali obično se preferira korištenje jedne od drugih metoda automatizacije. #import ne funkcionira dobro s aplikacijama sustava Office jer su biblioteke vrsta i korištenje prilično složene. Isto tako, Primjeri problema s prebrojavanjem brojeva teško je pronaći, jer se u programu #import u programu

    • Provjerite koristite li bilo kakve metode, kao što je otvoreno ili novo, koje vraćaju IDispatch * (LPDISPATCH) i ignoriranje povratne vrijednosti. Ako jeste, napustate ovo sučelje koje se vratilo i morat ćete promijeniti svoj kod da biste ga pustili kada više nije potreban.

    • Postupno komentirajte sekcije koda dok problem ne nestane, a zatim ga ponovno dodajte da biste otkrili gdje se problem pokreće.

    • Imajte na čemu da će neke aplikacije nastaviti prikazivati ako je korisnik "dotaknuo" aplikaciju. Ako se to dogodi dok automatizujete, aplikacija će vjerojatno nakon toga nastaviti prikazivati. Aplikacije sustava Office imaju svojstvo "UserControl" na objektu aplikacije koji možete čitati/pisati da biste promijenili to ponašanje.

    • Neke će aplikacije također odabrati da ostanu u tijeku ako je došlo do određenog korisničkog sučelja "akcije". Ako želite da se aplikacija napusti, zatim Pozovi njegov gumb Odustani () na objektu aplikacije. Word će se isključiti bez obzira na njezin broj referenci kada se zove otkaz. To se ne očekuje COM ponašanje. Excel će se, međutim, ispravno samo sakriti, ali ostaje pokrenut dok se ne oslobode sva otvorena sučelja. U principu, trebali biste objaviti sve izvanredne reference i samo prekinuti poziv () ako namjeravate da se aplikacija prekine.

  3. Znam što želim učiniti kao korisnik aplikacije sustava Office, ali kako to učiniti programatski putem automatizacije? Ono što vas zanima jest koje objekte, metode i svojstva morate koristiti. Najbolji način za navigaciju po modelima objekata programa Word, Excel i PowerPoint na temelju onoga što želite učiniti kao korisnika jest korištenje snimač makronaredbi. Samo na izborniku Alati odaberite makronaredba \ ' Snimi novu makronaredbu ', izvršite zadatak koji vas zanima, a zatim odaberite makronaredbu \ ' zaustavi snimanje. ' Kada završite sa snimanjem, na izborniku Alati odaberite macromacro, odaberite makronaredbu koju ste snimili, a zatim kliknite Uredi. To će vas odvesti do generiranog VBA koda koji će izvršiti zadatak koji ste snimili. Imajte na umu da snimljeni makro neće biti najbolji mogući kod u većini slučajeva, ali je to vrlo dobro za brzi primjer.

  4. Mogu li automatizirati ugrađenu aplikaciju sustava Office? Apsolutno. Trik je dobijanje pokazivača IDispatch: to se daje u programu Visual C++ Technical Notes 39 (TN039). Pročitajte sljedeći članak iz Microsoftove baze znanja za neki korak po korak:

    184663 HOWTO: ugradite i automatizirati radni list programa Microsoft Excel pomoću MFC-a

  5. Kako pristupiti svojstvima dokumenta u dokumentu sustava Office? Svojstva dokumenta dostupna su putem automatizacije ili izravno putem IPropertyStorage. U sljedećim člancima iz Microsoftove baze znanja prikazuju se svaki način:

    179494 HOWTO: korištenje automatizacije za dohvaćanje ugrađenih svojstava dokumenta

    186898 HOWTO: čitanje složenih svojstava dokumenta izravno uz VC + +

Potrebna vam je dodatna pomoć?

Proširite svoje vještine
Istražite osposobljavanje
Prvi koristite nove značajke
Pridružite se Microsoft Insidere

Jesu li ove informacije bile korisne?

Koliko ste zadovoljni kvalitetom prijevoda?

Što je utjecalo na vaše iskustvo?

Imate li još povratnih informacija? (Neobavezno)

Hvala vam na povratnim informacijama!

×