"Office" automatizavimas naudojant "Visual C++"

Suvestinė

Šiame straipsnyje atsakoma į dažnai užduodamus klausimus apie "Microsoft Office" automatizavimą naudojant "Visual C++".

Daugiau informacijos

Turinys

  1. Kas yra automatika?

  2. Aš naujokas į automatizavimą, kur galiu surasti gerų išteklių, kad sužinotumėte daugiau?

  3. Ar yra įvairių būdų, kaip galiu naudoti automatizavimą?

  4. Kas yra COM?

  5. Kaip pridėti prie "Office" taikomosios programos vykdymo egzemplioriaus?

  6. Kaip perduoti neprivalomus parametrus?

  7. Kaip sugauti įvykius, kuriuos veikia "Office" taikomosios programos?

  8. Mano automatizavimo kodas yra per lėtas. Kaip galiu pagreitinti veiksmus?

  9. Ką reiškia didžiulės klaidos reikšmės, pvz., "2147352573" arba "0x80030002"?

  10. Kas yra tipo biblioteka?

  11. Mano automatizavimo kodas veikia su "Microsoft Excel" 95, tačiau nepavyksta su "Microsoft Excel" 97. kodėl?

  12. Kodėl taikomoji programa, kurioje yra "mano programa", automatiškai perteikia atmintį?

  13. Žinau, ką noriu daryti kaip "Microsoft Office" taikomosios programos vartotoją, bet kaip tai padaryti programiškai naudojant automatizavimą?

  14. Ar galiu automatizuoti įdėtąją "Microsoft Office" taikomąją programą?

  15. Kaip pasiekti savo dokumento ypatybes "Microsoft Office" dokumente?

Klausimai ir atsakymai

  1. Kas yra automatika? Automation (anksčiau – OLE automatizavimas) yra technologija, kuri leidžia išnaudoti esamos programos funkcionalumą ir įtraukti ją į savo taikomąsias programas. Pavyzdžiui, galite naudoti "Microsoft Word" rašybos ir gramatikos tikrinimo galimybes savo taikomojoje programoje, nenaudodami "Microsoft Word" vartotojams. Galite netgi naudoti visus "Microsoft Excel" diagramų kūrimo, spausdinimo ir duomenų analizės įrankius. Ši technologija gali labai supaprastinti ir pagreitinti jūsų vystymąsi.

  2. Aš naujokas į automatizavimą, kur galiu surasti gerų išteklių, kad sužinotumėte daugiau? David Kruglinski 24 skyrius "vidinis Visual C++" (ISBN: 1-57231-565-2) tiekia bendrą apžvalgą ir puikius pavyzdžius. Be to, "Microsoft" žinių bazė yra geras informacijos šaltinis. Šis straipsnis yra gera pradžia ir daugiau konkrečių nuorodų rasite šiame "Microsoft" žinių bazės straipsnyje:

    152023 Išteklių radimas tiriant OLE automatizavimą Jei pageidaujate, kad mokymasis būtų pateiktas pavyzdyje, skaitykite šį straipsnį "Microsoft" žinių bazėje:

    179706 HOWTO naudokite MFC, kad automatizuotumėte "Excel" & kurti/formatuoti naują darbaknygę

  3. Ar yra įvairių būdų, kaip galiu naudoti automatizavimą? Yra trys pagrindiniai būdai, kaip galite naudoti automatizavimą: MFC, #import ir C/C++:

    • Naudodami MFC naudokite "Visual C++ ClassWizard", kad sukurtumėte "įvyniojimo klases" iš "Microsoft Office" tipų bibliotekų. Šioms klasėms, taip pat kitoms MFC klasėms, pvz., COleVariant, COleSafeArray, COleException, supaprastinti automatizavimo užduotis. Šis metodas paprastai rekomenduojamas kitiems, ir dauguma "Microsoft" žinių bazės pavyzdžių naudoja MFC.

    • #import nauja direktyva, kuri tapo pasiekiama naudojant "Visual C++ 5,0", sukuria VC + + "intelektualiuosius nurodymus" iš nurodyto tipo bibliotekos. Jis labai stiprus, bet dažnai nerekomenduojamas dėl nuorodų skaičiavimo problemų, kurios paprastai atsiranda naudojant "Microsoft Office" taikomąsias programas.

    • C/C++ automatizavimas yra daug sunkesnis, tačiau kartais reikia vengti važtaraščius su "MFC", arba problemų, susijusių su #import. Iš esmės dirbate su tokiomis API kaip CoCreateInstance () ir COM sąsajomis, pvz., Iišsiuntimo ir IUnknown.

    Svarbu pastebėti, kad yra šiek tiek skirtumų tarp automatikos iš C++, palyginti su "Plain C", nes COM buvo sukurta aplink C++ klasę. Daugiau informacijos ieškokite šiame "Microsoft" žinių bazės straipsnyje, kuriame nurodomas C pavyzdys:

    181473 HOWTO: naudokite OLE automatizavimą iš C taikomosios programos

  4. Kas yra COM? Automatizavimas pagrįstas komponentinio objekto modeliu (COM). COM yra standartinė programinės įrangos architektūra, pagrįsta sąsajomis ir pritaikyta turėti kodą, atskirtą į savarankiški objektai. Pagalvokite apie tai, kaip išplėsti Objektinis programavimas (OOP) paradigma, tačiau taikoma atskiroms taikomosioms programoms. Kiekvienas objektas atskleidžia sąsajų rinkinį, o visi ryšiai su objektu, pvz., inicijavimas, pranešimai ir duomenų perdavimas, įvyksta naudojant šias sąsajas. COM taip pat yra paslaugų, kurias teikia dinaminių saitų bibliotekos (dll), įdiegtos su operacinė sistema, rinkinys. Automatizavimas naudoja daugumą šių tarnybų. Vienas iš pavyzdžių yra "rūšiavimo" tarnyba, kuri paketais kliento taikomosios programos iškviečia serverio taikomosios programos sąsajas su nario funkcijomis ir perduoda jas su jų argumentais serverio taikomajai programai. Tai leidžia matyti, kad serverio sąsajos veikia kliento atmintyje, o tai nėra atvejis, kai klientas yra. exe, veikia savo proceso vietoje. Perskirstymas taip pat gauna reikšmes iš serverio metodų atgal per proceso ribas ir saugiai į kliento skambučio rankas. Yra daug kitų tarnybų, kurios būtinos automatizavimui, kurias teikia įvairios COM bibliotekos. Informacijos šaltiniai yra "viduje OLE-Second Edition", padarytais Kraig Brockschmidt, ISBN 1-55615-843-2, "vidinis COM" by Dale Rogerson-ISBN 1-57231-349-8 ir "Automation programuotojas" nuoroda "ISBN 1-57231-584-9.

  5. Kaip pridėti prie "Office" taikomosios programos vykdymo egzemplioriaus? Naudokite GetActiveObject () API. Automatizavimo serveriai patys užsiregistruoja puvinio (veikia objektų lentelėje) per RegisterActiveObject () API. Automatizavimo Klientai gali gauti einamame egzemplioriuje su kodu, pvz.:

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

    Pastaba: jei yra keli "Office" taikomosios programos, kurią norite pridėti, egzemplioriai, jums bus suteikta galimybė pridėti tik prie pirmojo egzemplioriaus, kuris buvo paleistas naudojant GetActiveObject () API. Teoriškai galite pakartoti kiekvieno atskiro egzemplioriaus puvinį, bet "Office" programos neregistruoja, jei kitas egzempliorius jau yra puvinio, nes pats pseudonimas yra visada tas pats (jo negalima išskirti). Tai reiškia, kad negalite pridėti prie bet kokio egzemplioriaus, išskyrus pirmą. Tačiau dėl to, kad "Office" taikomosios programos taip pat užregistruoja savo dokumentus puvinio, galite sėkmingai pridėti prie kitų atvejų, kai kartojate puvinio ieškomą konkretų dokumentą, tada gaunate programos objektą. Šiame "Microsoft" žinių bazės straipsnyje yra kodas, kaip pakartoti puvinio ir ieškoti dokumento pavadinimo:

    190985 HOWTO: Gaukite "Excel" arba "Word" dokumento Iišsiuntimo iš OCX Jums nereikės atlikti "PowerPoint", nes tai yra viena instancija; galite naudoti tik vieną jos egzempliorių.

  6. Kaip perduoti neprivalomus parametrus? Kai kurie metodai turi parametrus "pasirinktinai". Naudodami "Visual Basic" galite netyčia praleisti juos skambindami į metodą. Tačiau skambindami su "Visual C++", turite perduoti specialų variantą, kurio. VT laukas yra VT_ERROR, o. scode laukas yra DISP_E_PARAMNOTFOUND. tai yra:

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

    Tai tikrai, ką "Visual Basic" daro už scenos.

  7. Kaip sugauti įvykius, kuriuos veikia "Office" taikomosios programos? Iš esmės įgyvendinate įvykio sąsają, kurią norite gaudyti ("kriaukle"), ir nustatykite patariamąjį sujungimą su taikomąja programa ("šaltinis"). Šiame straipsnyje pateikiami nuoseklūs "Microsoft Word" pavyzdžiai:

    183599 HOWTO: sugavimo "Microsoft" Word97 taikomosios programos įvykiai naudojant VC + + Jei norite sukonfigūruoti patariamąjį ryšį, galite gauti serverio Iconnecsipointcontainer ir iškviesti Findconneccionpoint () su įvykio sąsajos IID. Tai suteikia jums "Iconnecetupoint" sąsają ir viskas, kas liko, yra skambinti patarimo () su jūsų įvykių sąsajos egzemplioriumi. Kai šie įvykiai įvyks, serveris bus perskambės šioje sąsajoje.

  8. Mano automatizavimo kodas yra per lėtas. Kaip galiu pagreitinti veiksmus? Dažnai pasitaikanti greičio problemų su automatizavimu priežastis yra pasikartojantis duomenų skaitymas ir rašymas. Tai būdinga "Excel" automatizavimo klientams. Tačiau dauguma žmonių nežino, kad šiuos duomenis paprastai galima įrašyti arba perskaityti iškart naudojant SAFEARRAY. Peržiūrėkite šiuos "Microsoft" žinių bazės straipsnius daugiau informacijos ir informatyvų pavyzdžių:

    186120 HOWTO: naudokite MFC, kad automatizuotumėte "Excel" ir užpildytumėte intervalą su masyvo

    186122 HOWTO: naudokite MFC, kad automatizuotumėte "Excel" & gauti masyvo iš intervalo

    179706 HOWTO: "MFC" naudojimas norint automatizuoti "Excel" ir kurti/formatuoti naują darbaknygę Be to, svarbu pažymėti, kad naudojant mainų sritį kartais gali pagerėti našumas. Pavyzdžiui, galite nukopijuoti duomenis į mainų sritį, tada naudoti automatizavimą, kad praneštumėte, jog serveris turi būti įklijuotas. Arba atvirkščiai; Pasakykite serveriui kopijuoti į mainų sritį ir įklijuoti į programą.

  9. Ką reiškia didžiulės klaidos reikšmės, pvz.,-2147352573 arba 0x80030002? Šios reikšmės yra žinomos kaip HRESULTs ir yra apibrėžtos Winerror. h. Skaičiai yra tokie didžiuliai, nes pirmasis bitas vaizduoja, ar tai yra klaidos rezultatas. Galite naudoti "ErrLook. exe" paslaugų programą, kuri pateikiama su "Visual C++", kad šie skaičiai būtų išversti į prasmingus aprašymus. Jei norite programiškai gauti klaidų aprašą, galite naudoti FormatMessage () API. Peržiūrėkite šiuos "Microsoft" žinių bazės straipsnius daugiau informacijos ir pavyzdžių, kaip naudoti FormatMessage ():

    186063 INFORMACIJA: automatizavimo klaidų vertimas VB/VBA

    122957 Pavyzdys: Decode32 ir Decode16 OLE klaidos kodas dekoderio įrankiaiPastaba: Jei naudojate "visual c++ 6,0" ir turite kintamąjį, kuriame yra ši reikšmė derinimo peržvalgos lange, papildykite ", HR" (be kabučių), kad jis galėtų jį išversti.

  10. Kas yra tipo biblioteka? Tipo biblioteka panaši į C/C++ antraštės failą. Jame yra sąsajos, metodai ir ypatybės, kurias publikuoja serveris. Galite peržiūrėti tipų biblioteką su OLE/COM objektų peržiūros programa (Oliview. exe), kuri gaunama su "Visual C++". Toliau pateikiamas "Microsoft Office 95", "97" ir "2000" tipų bibliotekos failų vardų sąrašas: 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. Mano automatizavimo kodas veikia su "Excel 95", tačiau nepavyksta su "Excel" 97. kas vyksta? "Excel" objektų modelyje atliktas reikšmingas pokytis iš 95 versijos į 97. "Excel" 95 įgyvendino visus jos metodus ir ypatybes viename "Iišsiunčiant". Tai reiškė, kad dažnai galima skambinti būdais, skirtais objektui X, iš objekto Y. Tai nebuvo geras dizainas, todėl "Office 97", kiekvienas objektas turi atskirą "Iišsiuntimo" diegimą. Tai reiškia, kad jei prašote metodo arba ypatybės iš objekto X iš atskiro objekto Y, gaunate klaidos pranešimą 0x80020003,-2147352573, "narys nerastas". Kad išvengtumėte šios klaidos, turite įsitikinti, kad "Iišsiuntimo" sąsaja, kuria skambinate, yra semantiškai teisinga. Daugiau informacijos ieškokite šiuose "Microsoft" žinių bazės straipsniuose:

    172108 HOWTO: trikčių diagnostika "narys nerastas", 0x80020003 klaida

  2. Taikomoji programa, kurioje aš automatizuojama, lieka atmintyje, kai baigiama programa. kas vyksta? Tikriausiai taip yra dėl to, kad pamiršote naudoti įsigytą sąsają ir jums reikės ją susekti. Štai keletas bendrų pasiūlymų ir dalykų, kurių reikia ieškoti:

    • Jei naudojate #import, labai tikėtina, kad galite vykdyti vieną iš nuorodų skaičiavimo klaidų, susijusių su ja. Dažnai klaidas galima apdoroti aplinkui, tačiau paprastai pageidaujama naudoti vieną iš kitų automatikos metodų. #import labai gerai veikia su "Office" taikomosiomis programomis, nes jos tipo bibliotekos ir naudojimas yra gana sudėtingi. Be to, tokios nuorodos skaičiavimo problemos yra sunkiai sekamos, nes naudojant #import galima nustatyti daug sąsajos lygio COM pokalbių.

    • Patikrinkite, ar skambinate kokių nors būdų, pvz., atidaryti ar nauji, kurie grąžina "Iišsiunčiant" * (LPIŠSIUNTIMO) ir ignoruoja grąžinamą reikšmę. Jei esate, atsisakote šios grąžintos sąsajos ir reikės pakeisti kodą, kad jį paleitumėte, kai nebereikia.

    • Pamažu nukomentuokite kodo sekcijas, kol problema išnyks, tada vėl įtraukite ją sumaniai, kad galėtumėte susekti, kur problema pradedama.

    • Turėkite omenyje, kad kai kurios taikomosios programos veiks, jei vartotojas "kreipėsi" su taikomąja programa. Jei taip nutinka, kai automatizuojate, tada taikomoji programa tikriausiai liks veikti vėliau. "Office" taikomosiose programose turi būti "UserControl" programos objekto ypatybė, kurią galite skaityti/rašyti Norėdami pakeisti šį veikimą.

    • Be to, kai kurios taikomosios programos nuspręs veikti, jei bus pakankamai vartotojo sąsajos "veiksmas". Jei ketinate išeiti iš programos, tada skambinkite jos Quit () metodu programos objekte. "Word" išjungs, nepriklausomai nuo jo nuorodų skaičiaus, kai "Quit" yra iškviesta. Tai nėra tikėtina COM elgsena. Tačiau "Excel" bus tinkamai slepiama, bet liks veikti, kol bus išleistos visos negrąžintos sąsajos. Paprastai turite atšaukti visas neapmokėtas nuorodas ir tik paskambinti (), jei ketinate baigti programą.

  3. Žinau, ką noriu daryti kaip "Office" taikomosios programos vartotoją, bet kaip tai padaryti programiškai automatizuojant? Ką domitės yra objektai, metodai ir ypatybės, kurias reikia naudoti. Geriausias būdas sužinoti, kaip naršyti "Word", "Excel" ir "PowerPoint" objektų modelius, atsižvelgiant į tai, ką norite daryti kaip vartotoją, naudoti makrokomandų rašytuvą. Tiesiog pasirinkite makrokomandos \ "įrašyti naują makrokomandą" meniu Įrankiai, vykdykite jus dominančią užduotį, tada pasirinkite makrokomandos \ "baigti įrašymą". Baigę įrašymą, meniu Įrankiai pasirinkite makrokomandos \ makrokomandos, pasirinkite įrašytą makrokomandą, tada spustelėkite Redaguoti. Taip pateksite į sugeneruotą VBA kodą, kuris atliks jūsų įrašytą užduotį. Turėkite omenyje, kad įrašyta makrokomanda daugeliu atvejų nebus geriausias kodas, bet tai labai gerai tinka greitam pavyzdžiu.

  4. Ar galiu automatizuoti įdėtąją "Office" taikomąją programą? Visiškai. Fokusas – tai "Iišsiuntimo" žymiklis: jis pateiktas "Visual C++" techninėje Pastaba 39 (TN039). Peržiūrėkite toliau pateiktą "Microsoft" žinių bazės straipsnį, kuriame pateikiamas nuoseklusis pavyzdys:

    184663 HOWTO: "Microsoft Excel" darbalapio įdėjimas ir automatizavimas naudojant "MFC"

  5. Kaip pasiekti savo dokumento ypatybes "Office" dokumente? Dokumento ypatybės pasiekiamos automatizuojant arba tiesiogiai naudojant IPropertyStorage. Šie "Microsoft" žinių bazės straipsniai rodo kiekvieną būdą:

    179494 HOWTO: naudokite automatizavimą, kad gautumėte įtaisytąsias dokumento ypatybes

    186898 HOWTO: skaitykite sudėtinių dokumentų ypatybes tiesiogiai naudodami VC + +

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×