Kokkuvõte

Selles artiklis antakse vastused levinud küsimustele Microsoft Office ' i automatiseerimise kohta Visual C++ kaudu.

Lisateave

Sisukord

  1. Mis on automatiseerimine?

  2. Kas mul on uus automatiseerimine, kust leida lisateavet?

  3. Kas automatiseerimist saab kasutada mitmel viisil?

  4. Mis on COM?

  5. Kuidas manustada Office ' i rakenduse töötava eksemplari?

  6. Kuidas anda valikuliste parameetrite üle?

  7. Kuidas tabada Office ' i rakendustega kokkupuutuvate sündmusi?

  8. Minu automatiseerimise kood on liiga aeglane. Kuidas saan asju kiirendada?

  9. Mida tähendavad need suured veaväärtused (nt-2147352573 või 0x80030002)?

  10. Mis on tüüpi teek?

  11. Minu automatiseerimise kood töötas Microsoft Excel 95, kuid nurjub Microsoft Excel 97. Miks?

  12. Miks on rakendus, mida ma automatiseerin, jääda pärast minu programmi lõpetamist mällu?

  13. Ma tean, mida soovin teha Microsoft Office ' i rakenduse kasutajana, aga kuidas teha seda programmiliselt automatiseerimise abil?

  14. Kas manustatud Microsoft Office ' I rakendust saab automatiseerida?

  15. Kuidas pääseda Microsoft Office ' i dokumendi atribuutidele juurde?

Küsimused ja vastused

  1. Mis on automatiseerimine? Automaatika (varem OLE automatiseerimine) on tehnoloogia, mis võimaldab teil ära kasutada olemasoleva programmi funktsioone ja lisada need oma rakendustesse. Näiteks saate Microsoft Wordi õigekirja-ja grammatikakontrolli võimalusi kasutada oma rakendusse, kui teie kasutajad ei näe Microsoft Wordi. Saate kasutada isegi kõiki Microsoft Exceli diagrammide, printimise ja andmete analüüsi tööriistu. See tehnoloogia võib oluliselt lihtsustada ja kiirendada teie arengut.

  2. Kas mul on uus automatiseerimine, kust leida lisateavet? Peatükk 24, David Kruglinski ' s "sees Visual C++" (ISBN: 1-57231-565-2) annab ülevaate üldisest ülevaatest ning mõnest suurepärasest näitest. Lisaks on Microsofti teabebaasis hea teabeallikas. See artikkel on hea algus ja te leiate Microsofti teabebaasi (Knowledge Base) artiklist täpsemaid viiteid.

    152023 Ressursside otsimine OLE-automatiseerimise õppimiseks Kui eelistate näiteks õppimist, lugege järgmist Microsofti teabebaasi artiklit:

    179706 MFC kasutamine Exceli automatiseerimiseks & uue töövihiku loomine/vormindamine

  3. Kas automatiseerimist saab kasutada mitmel viisil? Automatiseerimiseks saate kasutada kolme peamist võimalust: MFC, #import ja C/C++:

    • MFC-ga saate Microsoft Office ' i tüüpi teekidest luua "ümbriste klassid" Visual C++ ClassWizard. Need tunnid ja muud MFC-klassid (nt COleVariant, COleSafeArray, COleException, automatiseerimise toimingute lihtsustamine). Seda meetodit soovitatakse tavaliselt üle teiste ning enamik Microsofti teabebaasi näiteid kasutab MFC-i.

    • #import, Uus direktiiv, mis sai kättesaadavaks Visual C++ 5,0, loob määratud tüüpi teegist VC + + "nutikad kursorid". See on väga võimas, kuid sageli pole seda soovitatav lugeda, kuna Microsoft Office ' i rakendustes kasutatakse tavaliselt probleeme.

    • C/C++ automatiseerimine on palju keerulisem, kuid mõnikord on vaja vältida MFC-ga õhuliini või #import probleeme. Põhiliselt töötate selliste rakendusliidestega nagu CoCreateInstance () ja COM-liidesed (nt IDispatch ja IUnknown).

    Oluline on märkida, et c + + klassi automatiseerimise vahel on mõnevõrra erinevusi võrreldes tavalise C-ga, kuna COM oli mõeldud C++ klassi ümber. Lisateavet leiate artiklist Microsofti teabebaasi (Knowledge Base) järgmine artikkel:

    181473 HOWTO: C-rakendusest OLE-automatiseerimise kasutamine

  4. Mis on COM? Automatiseerimine põhineb Component Object modell (COM). COM on standardne tarkvara arhitektuur, mis põhineb liidestel ja mille jaoks on loodud kood, mis eraldatakse iseseisvate objektidena. Mõtle selle peale, kui pikendad objektile orienteeritud programmeerimise (OOPI) paradigmat, kuid mida kohaldatakse eraldi rakendustele. Iga objekt paljastab liideste kogumi ja kogu teabe objektile (nt lähtestamine, teatised ja andmeedastus) toimub nende liideste kaudu. COM on ka teenuste komplekt, mida pakuvad dünaamilised link teegid (dll-ID), mis on opsüsteemiga installitud. Automatiseerimine kasutab paljusid teenuseid. Ühe näitena on tegemist "" "" "" "" "" "" "" "" "," mis pakettide jaoks on kliendi rakenduse kõned serveri rakenduse liideste liikmete funktsioonide kaudu ning edastab need argumendid serveri rakendus Tundub, et serveri liidesed on avatud kliendi mälus, mis ei ole nii, kui klient on. exe töötab oma protsessi ruumis. Marshall saab ka tagastamise väärtused serveri meetoditest kogu protsessi piiridesse ja ohutult kliendi kõnesse. Automatiseerimiseks on palju muid olulisi teenuseid, mida pakuvad erinevad COM-teegid. Teave nende kohta on "sees ole-Second Edition", mida Kraig Brockschmidt, ISBN 1-55615-843-2, "sees COM" Dale Rogerson-ISBN 1-57231-349-8 ja "automatiseerimise programmeerija viide" ISBN 1-57231-584-9.

  5. Kuidas manustada Office ' i rakenduse töötava eksemplari? Kasutage GetActiveObject () API-d. Automatiseerimise serverid registreerivad end RegisterActiveObject () API ("Running Object table") kaudu. Automaatika kliendid saavad töötaval eksemplaril koodi, näiteks:

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

    Märkus: kui Office ' i rakendus, mida soovite manustada, on mitu eksemplari, saate manustada ainult esimesele eksemplarile, mis käivitati GetActiveObject () API abil. Teoreetiliselt saate itereerimiseks iga üksiku eksemplari jaoks, kuid Office ' i rakendused ei registreeri ennast, kui mõni muu eksemplar on juba MÄDA, sest hüüdnimi ise on alati sama (seda ei saanud sellegipoolest eristada). See tähendab, et te ei saa manustada mis tahes eksemplari, välja arvatud esimene. Kuna Office ' i rakendused registreerivad ka oma dokumendid MÄDANEmiseks, saate teistele eksemplaridele juurde pääseda, kui soovite, et iterating MÄDA otsib konkreetset dokumenti, ja seejärel saate selle kaudu rakendusobjekti hankida. Järgmise Microsofti teabebaasi (Knowledge Base) artiklis on iterating, mis näeb välja dokumendi nimi.

    190985 HOWTO: IDispatch Exceli või Wordi dokumendist OCX-ist Te ei pea seda PowerPointi jaoks tegema, sest tegemist on ühe eksemplari rakendusega; saate kasutada ainult ühte eksemplari.

  6. Kuidas anda valikuliste parameetrite üle? Mõnel meetodil on "valikuline" parameetrid. Rakenduses Visual Algtase saate selle meetodile helistamisel juhuslikult välja jätta. Kuid kui helistate Visual C++ abil, peate läbima spetsiaalse VARIANDI, mille. vt väli on VT_ERROR, ja scode väli on DISP_E_PARAMNOTFOUND. See on:

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

    See on tõesti, mida Visual algteadmised teeb kulisside taga.

  7. Kuidas tabada Office ' i rakendustega kokkupuutuvate sündmusi? Põhimõtteliselt peate rakendama sündmuse liidese, mida soovite püüda ("valamu"), ja häälestada rakenduse ("allikas") nõuandev ühendust. Järgmine artikkel annab teile üksikasjalikud näited Microsoft Wordi kohta.

    183599 HOWTO: Püüdke Microsoft Word97 rakenduse sündmused VC + + abil Kui soovite, et häälestate nõuandva ühendust, kuvatakse serveri IConnectionPointContainer ja helistage FindConnectionPoint () koos sündmuse IID. See annab teile IConnectionPoint liidese ja kõik, mis on jäänud, on anda nõu oma sündmuse liidese eksemplarile. Seejärel helistab server selle liidese kaudu tagasi, kui neid sündmusi esineb.

  8. Minu automatiseerimise kood on liiga aeglane. Kuidas saan asju kiirendada? Automatiseerimisega seotud probleemide sagedasem põhjus on andmete korduv lugemine ja kirjutamine. See on tüüpiline Exceli automatiseerimise klientide jaoks. Kuid enamik inimesi ei tea, et neid andmeid saab tavaliselt kirjutada või lugeda korraga SAFEARRAY abil. Lisateavet leiate järgmistest Microsofti teabebaasi (Knowledge Base) artiklitest ja informatiivsetest näidetest.

    186120 HOWTO: Exceli automatiseerimiseks ja massiiviga vahemiku sisestamiseks MFC kasutamine

    186122 HOWTO: Exceli automatiseerimiseks MFC abil & massiivist massiivi hankimine

    179706 HOWTO: Exceli automatiseerimiseks ja uue töövihiku loomiseks/vormindamiseks MFC abil Samuti on oluline märkida, et lõikelaua kasutamine võib mõnikord jõudlust parandada. Näiteks saate kopeerida andmed lõikelauale ja seejärel kasutada automatiseerimist, et öelda serveri kleepimine. Või vastupidi; Paluge serveris kopeerida ja kleepida oma rakendusse.

  9. Mida tähendavad need suured veaväärtused (nt-2147352573 või 0x80030002)? Neid väärtusi tuntakse HRESULTs ja need on määratletud rakenduses Winerror. h. Numbrid on nii suured, sest esimene bitt näitab, kas see on veaväärtus või mitte. Saate kasutada ErrLook. exe utiliiti, mis sisaldab Visual C++, et tõlkida need numbrid mõtestatud kirjeldusse. Kui soovite programmiliselt hankida vigade kirjelduse, saate kasutada FormatMessage () API-d. Lisateavet ja näiteid FormatMessage kasutamise kohta leiate järgmistest Microsofti teabebaasi (Knowledge Base) artiklitest.

    186063 TEAVE: automatiseerimise tõrgete tõlkimine VB/VBA jaoks

    122957 NÄIDIS: Decode32 ja Decode16 OLE-tõrkekood dekooderi tööriistadMärkus: kui kasutate rakendust visual c++ 6,0 ja teil on see väärtus aknas silumise jälgimine, lisage ", hr" (jutumärkideta), et see oleks teie eest Visual c++.

  10. Mis on tüüpi teek? Tüübi teek sarnaneb C/C++ päise failiga. See sisaldab serveris avaldamiseks kasutatavaid liideseid, meetodeid ja atribuute. Saate vaadata tüüpi teeki koos Visual C++ (Oleview. exe) OLE/COM Object Vieweriga. Siin on loetletud Microsoft Office 95, 97 ja 2000 teegi failinimede loend. 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. Minu automatiseerimise kood töötas Excel 95, kuid nurjub Excel 97. Mis toimub? Exceli objektimudeli jaoks on tehtud oluline muudatus versioonist 95 kuni 97. Excel 95 rakendas kõik selle meetodid ja atribuudid IDispatch ühtses rakendamises. See tähendas, et sageli võid helistada meetoditele, mis on mõeldud objektile X, objekt Y. See polnud hea kujundus, nii et Office 97-s on igal objektil eraldi IDispatch rakendamine. See tähendab, et kui taotlete meetodit või atribuuti objektilt X eraldi objektist Y, kuvatakse tõrketeade 0x80020003,-2147352573, "liige Not Found". Selle tõrke vältimiseks peate veenduma, et aluseks olev IDispatch-liides, millelt helistate, on semantiline õige. Lisateavet leiate järgmistest Microsofti teabebaasi (Knowledge Base) artiklitest.

    172108 HOWTO: tõrkeotsing "liige Not Found", 0x80020003 tõrge

  2. Minu automatiseerimise rakendus jääb mällu pärast seda, kui minu programm on valmis. Mis toimub? Kõige tõenäolisem on see sellepärast, et oled unustanud hankida omandatud liidese ja pead selle üles leidma. Siin on mõned üldised soovitused ja asjad, mida otsida.

    • Kui kasutate #import, on tõenäoline, et saaksite kasutada ühte sellega seotud viidete loendamise vigadest. Sageli saab vigu kasutada, kuid tavaliselt eelistatakse kasutada mõnda muud automatiseerimise meetodit. #import ei tööta väga hästi Office ' i rakendustega, sest selle tüüpi teegid ja kasutamine on üsna keerukad. Samuti on sellist viidet lugedes probleeme on raske jälgida, sest palju liides-Level COM kõned on kulisside taga, kui kasutate #import.

    • Vaadake, kas helistate mõnda meetodit (nt avatud või uus), mis tagastab IDispatch * (LPDISPATCH) ja tagastab tagastatava väärtuse. Kui olete, siis hülgate selle tagastatud liidese ja peate muutma oma koodi, et saaksite selle vabastada, kui seda enam ei vajata.

    • Saate koodi järk-järgult kommenteerida, kuni probleem kaob, ja lisage see õigeks ajaks, kus probleem algab.

    • Pange tähele, et mõned rakendused jäävad tööle, kui kasutaja on rakenduse "puudutanud". Kui see toimub automatiseerimise ajal, jääb rakendus tõenäoliselt hiljem tööle. Office ' i rakendustel on "UserControl" atribuut, mida saate lugeda/kirjutada, et seda käitumist muuta.

    • Ka mõned rakendused otsustavad jääda töötama, kui on toimunud piisavalt kasutajaliidest "toiming". Kui kavatsete rakendusest väljuda, siis helistage rakendusobjektile selle sulgemise () meetodil. Kui sulgemisest on loobutud, sulgub Word sõltumata sellest, kas viide on sulgunud. See pole oodatav COM-käitumine. Excel aga lihtsalt peidab ennast, kuid jääb tööle seni, kuni kõik täitmata liidesed on välja lastud. Üldiselt tuleks kõik täitmata viited vabastada ja kõnest loobuda (), kui kavatsete rakenduse sulgeda.

  3. Ma tean, mida soovin teha Office ' i rakenduse kasutajana, aga kuidas teha seda programmiliselt automatiseerimise kaudu? Teid huvitavad objektid, meetodid ja atribuudid, mida teil on vaja kasutada. Parim viis teada saada, kuidas liikuda Wordi, Exceli ja PowerPointi objektimudeli põhjal, mida soovite kasutajana teha, on kasutada makro salvesti. Valige menüüst Tööriistad käsk "Lindista uus makro", käivitage soovitud tööülesanne ja seejärel valige makro \ "Seiska salvestamine". Kui olete salvestamise lõpetanud, klõpsake menüü Tööriistad käsku Macro\Macros, valige salvestatud makro ja seejärel klõpsake nuppu Redigeeri. See viib teid loodud VBA-koodini, mis täidab teie salvestatud ülesande. Pidage meeles, et salvestatud makro ei ole enamikul juhtudel parim võimalik kood, kuid kiire näite korral on see väga hea.

  4. Kas manustatud Office ' i rakendust saab automatiseerida? Täiesti. Trikk muutub IDispatch osutiks: see on esitatud Visual C++ tehnilises märkuses 39 (TN039). Lugege järgmist Microsofti teabebaasi (Knowledge Base) artiklit üksikasjaliku näite jaoks.

    184663 HOWTO: Microsoft Exceli töölehe manustamine ja automatiseerimine MFC-ga

  5. Kuidas pääseda Office ' i dokumendi atribuutidele juurde? Dokumendi atribuudid on juurdepääsetavad automatiseerimise kaudu või otse IPropertyStorage kaudu. Järgmised Microsofti teabebaasi artiklid näitavad iga meetodit.

    179494 HOWTO: automatiseerimise kasutamine sisseehitatud dokumendi atribuutide toomiseks

    186898 HOWTO: dokumendi atribuutide lugemine otse VC + + abil

Kas vajate veel abi?

Täiendage oma oskusi
Tutvuge koolitusmaterjalidega
Kasutage uusi funktsioone enne teisi
Liitu Microsofti Insideri programmis osalejad

Kas sellest teabest oli abi?

Kui rahul te tõlkekvaliteediga olete?
Mis mõjutas teie kasutuskogemust?

Täname tagasiside eest!

×