Kokkuvõte

Sellest artiklist leiate vastused levinud küsimustele seoses automaatika Microsoft Office, Visual C++.

Lisateave

Sisukord

  1. Mis on automaatika?

  2. Ma olen uus automaatika, kust leida hea ressursse rohkem?

  3. Kas saate kasutada automatiseerimine erineval viisil?

  4. Mis on COM?

  5. Kuidas lisada Office'i rakenduse töötav eksemplar?

  6. Kuidas mööda parameetreid?

  7. Kuidas püüda sündmuste avatud Office'i rakendused?

  8. Minu automatiseerimine kood on liiga väike. Kuidas ma saan kiirendamiseks?

  9. Mida tähendavad need suur viga väärtused, nagu-2147352573 või 0x80030002,

  10. Mis on liik?

  11. Minu automatiseerimine kood töötanud Microsoft Excel 95, kuid Microsoft Excel 97 nurjub. Miks?

  12. Miks ei olen automatiseerimine rakenduse jäävad mälu kui minu programm on lõppenud?

  13. Ma tean, mida ma tahan teha, kui Microsoft Office'i rakenduse kasutaja, kuid kuidas see programmiliselt kasutada automatiseerimist?

  14. Ma saab automatiseerida manustatud Microsoft Office'i rakenduse?

  15. Kuidas pääseda oma dokumendi atribuute Microsoft Office'i dokumendi?

Küsimused ja vastused

  1. Mis on automaatika? Automatiseerimine (endine OLE-automatiseerimise) on tehnoloogia, mis võimaldab ära kasutada olemasoleva programmi funktsionaalsus ja lisada oma rakendustesse integreerida. Näiteks saate kasutada Microsoft Wordi õigekirja- ja grammatikakontrolli võimalusi oma rakendusse Microsoft Wordi teie kasutajatele ilma. Saate ka kõik Microsoft Exceli diagrammide printimine ja andmete analüüs tööriistad. Seda tehnoloogiat võivad oluliselt lihtsustada ja kiirendada oma arendus.

  2. Ma olen uus automaatika, kust leida hea ressursse rohkem? David Kruglinski "sees Visual C++" peatüki 24 (ISBN:1-57231-565 - 2) allikate ülevaade kui ka mõned suured näited. Lisaks Microsofti teabebaasi (Knowledge Base) on hea teabeallikas. See artikkel ise on hea ja Täpsemad viited leiate Microsofti teabebaasi (Knowledge Base) järgmist artiklit:

    leidmine ressursse uurida OLE automatiseerimineKui soovite näiteks õppimine, lugege järgmist Microsofti teabebaasi (Knowledge Base) artiklit:

    HOWTO kasutada MFC automatiseerimine Exceli & uue töövihiku loomine või vormindamine

  3. Kas saate kasutada automatiseerimine erineval viisil? On kolm põhilist viisi saate automatiseerimine: MFC, #import ja C/C++:

    • MFC, kasutada Visual C++ ClassWizard luua "ümbrise klassid" Microsoft Office tüüpi teegid. Need klassid, samuti MFC klassid, näiteks COleVariant, COleSafeArray, COleException, lihtsustada ülesannete automatiseerimine. See meetod on küll harilikult soovitatav teistele ja enamik Microsofti teabebaasi (Knowledge Base) näiteid kasutada MFC.

    • #import, uue direktiivi, mis saadi Visual C++ 5.0, loob VC ++ "smart viidad" määratud tüübiteek. Teatme - inventuuri probleemide tõttu ilmnenud tavaliselt kasutamisel koos Microsoft Office'i rakendused on väga võimas, kuid sageli pole soovitatav.

    • C/C++ automatiseerimine on palju raskem, kuid mõnikord on vaja vältida ballasti ja MFC või #import probleemid. Põhimõtteliselt töötada selliste API-d nimega CoCreateInstance() ja COM liidesed nagu IDispatch ja IUnknown.

    Oluline on veidi erinev võrreldes plain C, kuna COM loodi ümber C++ klassi C++ automaatika vahel. Lisateabe saamiseks lugege järgmist artiklit klõpsake Microsofti teabebaasi C näide:

    HOWTO: kasutada C rakendus OLE automatiseerimine

  4. Mis on COM? Automatiseerimise aluseks Component Object Model (COM). COM on tarkvara arhitektuur põhineb liidesed ja eesmärk on iseseisev objektide jagatud koodi. Arvan, et see pikendamine paradigma objekt orienteeritud programmeerimine (OOP), kuid neid kohaldatakse eraldi rakendused. Iga objekti seab liideste komplekt ja kogu suhtlus objekti lähtestamine, teatised ja andmeedastus, nagu juhtub liideste kaudu. Samuti on COM dünaamiliselt lingitavad teegid (dll) installitud operatsioonisüsteemi pakutavate teenuste komplekt. Automatiseerimine kasutab palju teenuseid. Üheks näiteks on "Raudteerongide" teenus, mis paketid kliendi rakendus nõuab server rakenduse liidesed liige funktsioonid ning annab neile oma argumendid server rakenduse. Selle tõttu tundub, et serveri liidesed on avatud kliendi mälu, mis ei ole juhul, kui klient on on .exe töötab eraldi protsessi ruumi. Sorteerimis saab ka return väärtused serveri lahendustest tagasi kogu protsessi piirid ja ohutult kliendi kõne kätte. Paljud teenused on oluline automatiseerimine, mida pakutakse erinevaid COM teegid. Teave nende allikate hulka "Sees Ole – Second Edition" Kraig Brockschmidt, ISBN 1-55615-843-2, "Sees COM" Dale Rogerson - ISBN 1-57231-349-8, ja "Automatiseerimine programmeerija viide", ISBN 1-57231-584-9.

  5. Kuidas lisada Office'i rakenduse töötav eksemplar? Kasutage GetActiveObject() API. Automatiseerimine serverite end registreerima ROT (töötab objekti tabel), RegisterActiveObject() API kaudu. Automatiseerimine kliendid saavad töötavad astme koodiga 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 on installitud mitu eksemplari Office'i rakenduse, mida soovite lisada, siis ainult saab manustamine esimese eksemplari, mis võeti kasutusele GetActiveObject() API abil. Teoreetiliselt saab sirvib ROT iga üksiku eksemplari, kuid Office'i rakendusi ei end registreerima, kui teine eksemplar on juba on MÄDA, sest hüüdnime ise on alati sama (seda ei saa eristada ikkagi). See tähendab, et kõik peale esimese eksemplari ei saa siduda. Siiski Kuna Office'i rakendused registreerida ka oma dokumendid on MÄDA, saate edukalt siduda teiste juhtumite iterating seotud, siis see saada rakendusobjekt otsib konkreetset dokumenti MÄDA. Järgmises Microsofti teabebaasi (Knowledge Base) artiklis iterating on MÄDA ja otsite dokumendi nimi on mõned kood:

    HOWTO: IDispatch Excel või Word dokumendi toomine on OCXEi pea selleks PowerPoint, sest see on ühekordse rakendus; võib olla ainult üks eksemplar see töötab.

  6. Kuidas mööda parameetreid? Mõned meetodid on "parameetreid". Visual Basic saate juhuslikult jätate neile kui meetodi. Siiski Visual c++ helistades peate läbima spetsiaalse VARIANT, mille .vt väli on VT_ERROR ja .scode 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 teevad Visual Basicu su.

  7. Kuidas püüda sündmuste avatud Office'i rakendused? Põhimõtteliselt rakendada saagi ("valamu") sündmuse liidese ja setup nõustamisteenuse ühendus rakendusega ("allikas"). Järgmine artikkel pakub üksikasjalikke näiteid Microsoft Wordi.

    HOWTO: saagi kasutades VC ++ Microsofti Word97 rakenduse sündmusedÜldiselt nõustamine ühenduse setup võite saada serveri IConnectionPointContainer ja helistage FindConnectionPoint() koos sündmuse kasutajaliidese IID. See annab teile IConnectionPoint liides ja on alles on helistada Advise() sündmuse kasutajaliidese taasluua. Server helistab tagasi selle liidese kaudu kui need sündmused.

  8. Minu automatiseerimine kood on liiga väike. Kuidas ma saan kiirendamiseks? Levinum põhjus kiiruse probleemid automatiseerimine on korduvad lugemise ja kirjutamise andmeid. See on tavaline Exceli automaatika klientide jaoks. Kuid enamik inimesi ei ole teab, et need andmed tavaliselt kirjutada või lugeda kõik korraga kasutamine SAFEARRAY. Lugege järgmisi Microsofti teabebaasi artikleid lisateavet ja informatiivne näited:

    HOWTO: MFC abil automatiseerida Exceli ja täitke array vahemik

    HOWTO: MFC abil Exceli automatiseerida ja saada massiivi vahemikust

    HOWTO: MFC abil automatiseerida Exceli ja uue töövihiku loomine või vormindamineSamuti on oluline viidata sellele, et kasutades lõikelauale mõnikord võib parandada jõudlust. Näiteks võib andmete kopeerimine lõikelauale ja seejärel serverile teada, et automatiseerimise abil. Või vastupidi; serverile eksemplari lõikelauale ja kleepige oma taotluse.

  9. Mida need suur viga väärtused, näiteks-2147352573 või 0x80030002 tähendab? Need väärtused on tuntud HRESULTs ja winerror.h määratletud. Numbrid on nii suur, sest esimene tähistab, kas see on tõrge tulemus. Kasutage ErrLook.Exe utiliit, mis on kaasas Visual C++ tõlkida need arvud olulisi kirjeldusi. Kui soovite saada programmiliselt kirjeldus tõrkeid, saate FormatMessage() API. Lugege järgmist Microsofti teabebaasi artiklite kohta lisateabe saamiseks ja näited FormatMessage() kasutamise kohta:

    INFO: tõlkida VB/VBA automatiseerimine tõrked

    näidis: Decode32 ja Decode16 ole-tõrge koodi dekooder tööriistadMärkus: kui kasutate Visual C++ 6.0 ja olete muutuja, mis sisaldab seda väärtust siluri vaadata aknas, lisada ", hr" (ilma jutumärkideta) see on Visual C++ tõlkida teie eest!

  10. Mis on liik? C/C++ päisefail sarnaneb teegi tüüp. See sisaldab liideseid, meetodeid ja server publishing atribuute. Saate vaadata tüübiteek OLE/COM objekti abil (Oleview.exe) Visual C++ kaasas. Siin on nimekiri tüübi teeki failinimesid Microsoft Office 95 ja 97, 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. Minu automatiseerimine kood töötanud Excel 95, kuid Excel 97 nurjub. Mis toimub? Exceli objektimudel tehtud olulisi muudatusi 95 97 versioonist. Excel 95 rakendada ühtse rakendamise IDispatch meetodeid ja atribuute. See tähendab, et sageli võib kõne mõeldud objekti X, objekti Y meetodeid. Ei olnud hea disain, nii et Office 97 iga objekt on oma eraldi Idispatch rakendamist. See tähendab, et kui te küsite meetodi või atribuudi objekti X eraldi objekti Y, saate tõrketeate 0x80020003,-2147352573, "liige ei leitud." Selle tõrke vältimiseks peate veenduge, et teete kõnede aluseks IDispatch liides on semantiliselt õige. Vaadake lisateabe saamiseks järgmisi Microsofti teabebaasi artikleid:

    HOWTO: "Liige ei leitud" 0x80020003 tõrkeotsing tõrge

  2. Olen automatiseerimine rakendus jääb pärast minu programmi mälu. Mis toimub? Kõige tõenäolisemalt seda sellepärast, et olete unustanud vabastada omandatud liides ja te peate seda tabada. Siin on mõned üldised näpunäited ja asju, mida otsib:

    • Kui kasutate #import, on tõenäoliselt arvutisse olema installitud ühte sellega seotud viide lugedes vead. Sageli vigu saab töötas ümber, kuid tavaliselt on eelistatud ühe automatiseerimise meetodeid. #import ei tööta väga hästi Office'i rakendused, kuna selle tüüp teegid ja kasutamine on üsna keeruline. Ka selliseid viide inventuuri probleeme on raske tabada, kuna kasutajaliidese tasemel COM kutsub palju on su #import kasutamisel.

    • Kontrollige, kas helistate muid võtteid, nt avamine või uus, on IDispatch tulemit * (LPDISPATCH) ja ignoreerimise tagastatava väärtuse. Kui olete, siis on loobumist selle tagastatud liidese ja ei vaja muuta oma kood, et selle kui enam ei vaja.

    • Järk-järgult kommentaar välja seni, kuni probleem kaob, siis lisage see kood jaotistes tagasi mõistlikult tabada, kus probleem algab.

    • Pange tähele, et mõned rakendused jäävad, kui kasutaja on "puudutada" rakendus töötab. Kui nii juhtub, kui teil automatiseerimiseks, siis rakenduse ilmselt jääb töötab pärast seda. Office'i rakendused on "UserControl" atribuut rakendus objekti, mida te saate lugemiseks või kirjutamiseks selle käitumise muutmiseks.

    • Lisaks mõned rakendused otsustab peatada töötab piisavalt kasutajaliides "action" on esinenud. Kui te kavatsete väljuda rakendus, helistage seejärel selle Quit() meetod rakendusobjekt. Wordi suletakse sõltumata oma Viidete arv Quit kutsumisel. See ei ole ettearvatav COM. Excel, on lihtsalt korralikult peita end kuid peatada enne, kui kõik täitmata liidesed välja. Üldiselt peaks kõik täitmata viited väljalaske ja helistada Quit() ainult juhul, kui rakenduse sulgemine.

  3. Ma tean, mida ma tahan teha Office'i rakenduste kasutajana, kuid kuidas see programmiliselt automatiseerimise kaudu? Te olete huvitatud on, milliseid objekte, meetodeid, ja peate kasutama. Parim viis teada, kuidas kasutada Wordi, Exceli ja PowerPointi, vastavalt sellele, mida soovite teha kasutajana, objekti mudelid on kasutada makro salvestit. Lihtsalt Macro\ "Kirje uus makro" Valige menüüst Tööriistad, käivitada ülesanne huvitab, siis valige Macro\ "Lõpeta salvestamine." Kui olete lõpetanud salvestamist, valige menüüst Tööriistad Macro\Macros, valige salvestatud makro ja seejärel klõpsake nuppu Redigeeri. See viib teid loodud VBA-koodi, mis on ülesande salvestatud. Pidage meeles, et salvestatud makro ei saa kõige paremini võimalik koodi enamasti, kuid see ei väga hästi kiire näide.

  4. Ma saab automatiseerida manustatud Office'i rakenduse? Täiesti. Puhul töötab muutub kursor IDispatch: see on antud Visual C++ tehniline märkus 39 (TN039). Lugege järgmist Microsofti teabebaasi (Knowledge Base) artiklit samm-sammult näide:

    HOWTO: manustada ja automatiseerida MFC Microsoft Exceli tööleht

  5. Kuidas pääseda oma dokumendi atribuute Office'i dokumendi? Dokumendi atribuudid on kättesaadavad automatiseerimise kaudu või otse IPropertyStorage. Järgmistes Microsofti teabebaasi (Knowledge Base) artiklites näitavad iga meetodi.

    HOWTO: kasutada sisseehitatud dokumendi atribuudid automatiseerimine

    HOWTO: lugeda otse koos VC ++ ühendi dokumendi atribuudid

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.

Kogukonnad aitavad teil küsimusi esitada ja neile vastuseid saada, anda tagasisidet ja saada nõu rikkalike teadmistega asjatundjatelt.