Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Suvestinė

Šis straipsnis atsako į dažniausiai užduodamus klausimus apie automatizavimo Microsoft Office iš Visual C ++.

Daugiau informacijos

Turinys

  1. Kas yra automatizavimo?

  2. Aš automatizavimo, kur galima rasti geros išteklių reikia daugiau informacijos?

  3. Ar yra įvairiais būdais gali naudoti automatizavimo?

  4. Kas yra COM?

  5. Kaip pridėti prie "Office" programą veikia egzemplioriaus?

  6. Kaip tai perduoda pasirinktinius parametrus?

  7. Kaip tai sugavimo įvykiai gali Office taikomosios programos?

  8. Automatizavimo kodas yra per lėtas. Kaip galiu paspartinti?

  9. Ką reiškia šie labai klaidos reikšmių, pvz.,-2147352573 arba 0x80030002?

  10. Kas yra tipų bibliotekos?

  11. Automatizavimo kodas bendradarbiavo su "Microsoft" Excel 95, bet nepavyksta su "Microsoft Excel 97". kodėl?

  12. Kodėl nėra programos, aš esu automatizavimas likti atminties baigus mano programa?

  13. Aš žinau, ką turėčiau daryti Microsoft Office programą vartotojo vardą, bet kaip man padaryti tai programiškai naudojant automatizavimo?

  14. Aš automatizuoti "embedded" Microsoft "Office" programą?

  15. Kaip patekti į dokumento ypatybes Microsoft Office dokumentą?

Klausimai ir atsakymai

  1. Kas yra automatizavimo? Automatizavimas (anksčiau OLE automatizavimo) yra technologija, kuri leidžia esamas programą galimybes ir įtraukti jį į savo programas. Pavyzdžiui, galite naudoti Microsoft Word rašybos ir gramatikos tikrinimo galimybės į savo prašymą Microsoft Word jūsų vartotojai. Netgi galite naudoti visas "Microsoft" Excel diagramų kūrimas, spausdinimas ir duomenų analizės įrankių. Ši technologija gali labai supaprastinti, jūsų kūrimas.

  2. Aš automatizavimo, kur galima rasti geros išteklių reikia daugiau informacijos? David Kruglinski "viduje Visual C++" 24 skyrių (ISBN:1-57231-565 - 2) yra bendra apžvalga, taip pat puikių pavyzdžių. Be to, "Microsoft" žinių bazėje yra geras informacijos šaltinis. Šiame straipsnyje, savaime yra gera pradžia ir konkretesnės nuorodos rasite šioje "Microsoft" žinių bazės straipsnį:

    rasti išteklių mokytis OLE automatizavimoJei pageidaujate mokymosi, pavyzdžiui, apsilankykite šioje "Microsoft" žinių bazės straipsnį:

    HOWTO naudoti MFC automatizuoti "Excel" ir sukurkite naują darbaknygę/formatas

  3. Ar yra įvairiais būdais gali naudoti automatizavimo? Trimis būdais pagrindinio galite naudoti automatizavimas: MFC, #import ir C/C++:

    • Su MFC, naudoti Visual C ++ ClassWizard sukurti "sąsajų klasių" iš "Microsoft" Office tipų bibliotekos. Šios klasės, taip pat kitų MFC klasės, pvz., COleVariant, COleSafeArray, COleException, supaprastinti automatizavimo užduotis. Šis būdas paprastai rekomenduojama per kitus, ir dauguma iš "Microsoft" žinių bazės pavyzdžių naudoti MFC.

    • #import, Naujojoje, gaunama naudojant Visual C ++ 5.0, sukuria VC ++ "smart patarimų" nuo nurodyto tipo biblioteka. Tai labai stiprus, bet dažnai rekomenduojama dėl nuorodos - skaičiavimo problemas, kurios paprastai atsiranda, kai naudojamas su Microsoft Office programomis.

    • C/C++ automatizavimas yra daug sunkiau, bet kartais reikia išlaidas su MFC, ar problemų su #import. Iš esmės, galite dirbti su tokių kaip CoCreateInstance() API ir COM sąsajos, pvz., IDispatch ir IUnknown.

    Svarbu Atkreipkite dėmesį, kad kai kurie šiek tiek skiriasi automatizavimo iš C++ palyginti su paprasto C, nes COM buvo skirta apie C++ klasės. Jei norite gauti daugiau informacijos, žiūrėkite šį straipsnį Microsoft žinių bazėje esantį C pavyzdys:

    HOWTO: naudokite OLE automatizavimo iš C programa

  4. Kas yra COM? Automatizavimo, priklauso nuo Komponentinio objektų modelio (COM). COM yra standartinį programinės įrangos architektūra, atsižvelgiant į sąsajas ir yra suskirstyti į autonominius objektų kodas. Pagalvokite apie tai, kaip objekto Objektinis programavimas (OOP) paradigma, bet taikomas atskiras programas. Kiekvienas objektas kelia tam tikrų sąsajas ir bendraudami su objektu, pvz., inicijavimo, pranešimai ir duomenų perdavimą, vyksta per šias sąsajas. COM taip pat dinaminių saitų bibliotekos (dll), įdiegta operacinės sistemos paslaugų rinkinį. Automatizavimo naudoja daugelis iš šių paslaugų. Vienas pavyzdys yra "Rūšiavimo" paslaugą, kuri paketai kliento programa ragina valstybės funkcijas serverio taikomosios programos sąsajas ir perduoda turintiems jų argumentų, serverio programos. Todėl atrodo, kad serverio sąsajos susiduria kliento atminties srityje, kuris nėra, kai klientas yra yra .exe veikia savo proceso srityje. Rūšiavimo taip pat gauna grąžina reikšmę iš serverio būdų atgal per procesą ribos ir saugiai į kliento skambučio. Yra daug kitų paslaugų būtina automatizavimo teikiamas COM bibliotekos. Informacija apie tuos šaltiniai "Viduje Ole – antrasis leidimas" Kristina Brockschmidt, ISBN 1-55615-843-2, "Viduje COM" Dale Rogerson - ISBN 1-57231-349-8, ir "Automation programavimo nuoroda," ISBN 1-57231-584-9.

  5. Kaip pridėti prie "Office" programą veikia egzemplioriaus? Naudokite GetActiveObject() API. Automatizavimo serveriai prisiregistruoti AG (veikia objekto lentelės), per RegisterActiveObject() API. Pvz., automatizavimas klientams gauti veikia egzempliorių kodas:

          // 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 atvejų veikia Office taikomosios programos, kurią norite pridėti, tik galima pridėti prie pirmiausia pradėta naudojant GetActiveObject() API. Teoriškai, galime kartoti atskirų kiekvienu AG, tačiau Office taikomųjų programų nereikia registruotis jei kitą jau į AG nes savo pseudonimą visada yra tas pats (ji negali būti atskirta priedu). Tai reiškia, kad negalite susieti su bet kuriuo atveju, išskyrus pirmąjį. Tačiau dėl to, kad Office programos taip pat registruoti savo dokumentus, AG, galite sėkmingai prie naujos iš Iteracja AG ieškote konkrečiu dokumentu, prie jo, tada iš jos darbo programos objektas. Šiame "Microsoft" žinių bazės straipsnyje Iteracja į AG ir ieško dokumento pavadinimas yra kodą:

    HOWTO: gauti IDispatch Excel ar Word dokumento, OCXJums nereikės padaryti ir su "PowerPoint", nes tai yra vieno egzemplioriaus programa; galite turėti tik vieną egzempliorių ir ji veikia.

  6. Kaip tai perduoda pasirinktinius parametrus? Kai kurie būdai yra "neprivaloma" parametrus. Visual Basic, galite netyčia praleisti juos kai iškviečiate metodą. Tačiau skambinant su Visual C ++ turite išlaikyti specialią variantą, kurio .vt yra VT_ERROR ir .scode 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 ir yra tai, ką daro Visual Basic foninės.

  7. Kaip tai sugavimo įvykiai gali Office taikomosios programos? Iš esmės įvykių sąsaja, kurią norite sugavimo ("rinktuvas"), ir sukonfigūruoti naudoti konsultavimo ryšį su programa ("šaltinis"). Šiame straipsnyje pateikiama nuoseklūs pavyzdžiai Microsoft Word:

    HOWTO: sugavimo "Microsoft" Word97 programos įvykių naudojant VC ++Paprastai sukonfigūruoti konsultavimo ryšį, galite gauti serverio IConnectionPointContainer ir skambinti FindConnectionPoint() su įvykių sąsajos IID. Tai suteikia IConnectionPoint sąsają ir viskas, kad liko paskambinti Advise() su jūsų įvykių sąsajos kopiją. Serveris paskambins atgal per šią sąsają, kai atsiranda šie įvykiai.

  8. Automatizavimo kodas yra per lėtas. Kaip galiu paspartinti? Dažna greičio automatizavimo problemos yra su pasikartojantis skaityti ir rašyti duomenis. Tai būdinga "Excel" automatizavimas klientams. Vis dėlto daugelis žmonių nežino, šie duomenys paprastai gali būti parašyta arba skaityti vienu metu naudojant SAFEARRAY. Ieškokite šioje "Microsoft" žinių bazės straipsnius, daugiau informacijos ir informacijos pavyzdžiai:

    HOWTO: naudoti MFC automatizuoti "Excel" ir įveskite masyvo diapazonas

    HOWTO: naudoti MFC automatizuoti "Excel" ir gauti iš įvairių masyvas

    HOWTO: naudoti MFC automatizuoti "Excel" ir sukurkite naują darbaknygę/formatasBe to, svarbu atkreipti dėmesį, kad mainų kartais gali pagerinti efektyvumą. Pvz., galite nukopijuoti duomenis į mainų sritį, tada naudokite automatizavimo nurodyti serveriui, Norėdami įklijuoti. Arba atvirkščiai; nurodyti serveriui, nukopijuokite į mainų sritį ir įklijuoti į savo programą.

  9. Ką daryti, kad šiuos didelis klaidos reikšmių, pvz.,-2147352573 arba 0x80030002 reiškia? Šios reikšmės yra žinomi kaip HRESULTs ar winerror.h nustatyti. Skaičiai yra tiek daug, nes pirmąjį nurodo, ar ji yra klaidos rezultatas, ar ne. Galite naudoti ErrLook.Exe įrankis, kuris jau yra sukurtas Visual C ++ išversti šiuos skaičius į reikšmę aprašymai. Jei norite programiškai gauti klaidos aprašą, galite naudoti FormatMessage() API. Ieškokite šioje "Microsoft" žinių bazės straipsnius, daugiau informacijos ir pavyzdžių apie FormatMessage():

    INFO: vertimas Automation klaidų VB/VBA

    pavyzdys: Decode32 ir Decode16 OLE klaidos kodas dekoderis įrankiaiPastaba: Jei naudojate Visual C ++ 6.0 ir turi šią reikšmę derinimo peržvalgos langas, kuriame yra kintamasis, pridėti ", žmogiškieji ištekliai" (be kabučių) į jį, kad Visual C ++ išversti!

  10. Kas yra tipų bibliotekos? Tipų biblioteka yra panašus į C/c ++ antraštės failą. Jame yra sąsajas, metodus ir ypatybes, skelbia tarpinį serverį. Galite peržiūrėti su OLE/COM objekto peržiūros programą (Oleview.exe), yra Visual C ++ tipų biblioteka. Čia yra Microsoft Office 95, 97 ir 2000 tipo bibliotekos failų 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. Automatizavimo kodas bendradarbiavo su Excel 95, bet nepavyksta su Excel 97. kas vyksta? Objekto modelis, skirtas "Excel" atlikote žymius versijos 95 – 97. Excel 95 įgyvendinti vieną įgyvendinimas IDispatch būdų ir ypatybės. Tai reiškia, kad dažnai galite pavadinti būdų skirtas objekto Y X, objektą. Tai nėra gero dizaino, kad "Office 97" versijose, kiekvieną objektą turi savo atskirti Idispatch diegimas. Tai reiškia, kad jei jums užduoti metodą arba ypatybę iš objekto X iš Y atskirą objektą, gaunate klaidos pranešimą 0x80020003,-2147352573, "narys nerastas." Norėdami išvengti šios klaidos, jums reikia įsitikinkite, ar pagrindinės IDispatch sąsaja, galite skambinti iš semantiškai teisingai. Ieškokite šioje "Microsoft" žinių bazės straipsnius, jei norite gauti daugiau informacijos:

    HOWTO: trikčių diagnostika "Narys nerastas", 0x80020003 klaidos

  2. Aš esu automatinės programos lieka atminties po to, kai mano programa baigiama. kas vyksta? Labiausiai tikėtina, kad pamiršote išleidimo įsigytas sąsaja ir jums reikia sekti jį. Čia rasite patarimų, bendrieji ir dalykų, kuriuos reikia ieško:

    • Jei naudojate #import, tai labai tikėtina, kad jūsų kompiuteryje gali veikti į vieną nuorodos skaičiavimo klaidų, su kuriais susietas. Dažnai klaidas galite padėjo išspręsti, bet paprastai ji yra pageidaujama naudoti vieną iš toliau pateikiamų būdų automatizavimas. #import neveikia gerai su Office programomis, nes jos tipų bibliotekos ir naudoti yra gana sudėtingas. Be to, tokios nuorodos skaičiavimo problemos sunku susekti, nes sąsajos lygio COM ragina daug foninės naudojant #import.

    • Patikrinkite, jei skambinate jokių metodų, pvz., atidaryti, arba naujas, grįžkite į IDispatch * (LPDISPATCH), ir ignoruoti reikšmę. Jei, jūs esate atsisakyti šios randamas sąsajos ir turės pakeisti savo kodą, kad galite paleisti jį kai nereikia.

    • Palaipsniui komentaras iš skyrių kodo tol, kol problema išnyksta, tada jį įtraukti atgal sumaniai susekti kur prasideda problema.

    • Atkreipkite dėmesį, kad kai kurios programos išliks, jei vartotojas turi "kreipėsi" programos. Jei taip atsitinka, kai jums automatizuoti, tada programos tikriausiai išliks po to veikia. Office programos turi "UserControl" ypatybė programos objekto, jūs galite skaityti/rašyti pakeisti šią problemą.

    • Be to, kai kurios programos nuspręs palaikyti, jei įvyko pakankamai vartotojo sąsaja "veiksmas". Jei ketinate išeiti iš programos, paskambinkite Quit() metodą šį programos objektą. Word išsijungs, nepriklausomai nuo to, jo nuorodų skaičius kai uždaryti. Tai nėra numatyta COM. "Excel", bus tinkamai tiesiog paslėpti pats tačiau palaikyti veikia tol, kol visi neapmokėta sąsajos išleisti. Paprastai turi išleidimo neapmokėta visos nuorodos ir tik skambinti Quit(), jei jūs uždaryti programą.

  3. Aš žinau, ką turėčiau daryti Office programos vartotojo vardą, bet kaip man padaryti tai programiškai automatizavimo? Kas domitės yra kas objektus, metodus ir ypatybes, jums reikia naudoti. Geriausias būdas sužinoti, kaip naršyti objekto modeliai, Word, Excel ir Powerpoint, atsižvelgiant į tai, ką norite daryti kaip vartotojas, yra naudoti makrokomandų įrašymo priemone. Tiesiog meniu Įrankiai pasirinkite Macro\ "Įrašyti naują makrokomandą", atlikti užduotį, jums įdomu, tada pasirinkite Macro\ "Sustabdyti įrašymą." Baigę įrašymą, meniu Įrankiai pasirinkite Macro\Macros, pasirinkite įrašėte makrokomandą, tada spustelėkite Redaguoti. Taip pateksite į sugeneruotas VBA kodas, kuris bus atlikti užduotį, galite įrašyti. Turėkite omenyje, įrašytą makrokomandą nebus galimi kodai, daugeliu atvejų, bet tai nėra labai gerai greitai pvz.

  4. Aš automatizuoti "embedded" Office "programą? Tikrai taip. Pavyko gauti IDispatch žymeklį: tai yra pateiktas Visual C ++ techninė Pastaba 39 (TN039). Ieškokite šioje "Microsoft" žinių bazės straipsnį žingsnis po žingsnio pavyzdys:

    HOWTO: įterpti ir automatizuoti "Microsoft Excel" darbalapio su MFC

  5. Kaip patekti į dokumento ypatybės Office Document? Dokumento ypatybės yra prieinama per automatizavimo arba tiesiogiai per IPropertyStorage. Šiuose "Microsoft" žinių bazės straipsniuose rodo kiekvieną būdą:

    HOWTO: naudoti automatizavimo integruotas dokumento ypatybės

    HOWTO: skaityti Jungtinis dokumento ypatybės tiesiogiai su VC ++

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×