Office automazione tramite Visual c ++

Traduzione articoli Traduzione articoli
Identificativo articolo: 196776 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene fornita risposta alle domande comuni riguardanti l'automazione di Microsoft Office da Visual c ++.

Informazioni

Sommario

  1. Che cos'Ŕ automazione?
  2. Mi novitÓ di automazione, dove Ŕ possibile trovare buona risorse per ulteriori informazioni?
  3. Esistono diversi modi, ╚ possibile utilizzare l'automazione?
  4. Che cos'Ŕ COM?
  5. Collegarsi all'istanza in esecuzione di un'applicazione di Office
  6. Come Ŕ possibile passare i parametri facoltativi?
  7. Come si intercettare gli eventi esposti dalle applicazioni di Office?
  8. Il codice di automazione Ŕ troppo lento. Come possibile velocizzare operazioni?
  9. Che cosa significano questi valori di errore di grandi dimensioni, come-2147352573 o 0x80030002?
  10. Che cos'Ŕ una libreria dei tipi?
  11. Il codice di automazione ha collaborato con Microsoft Excel 95, ma non riesce con Microsoft Excel 97. PerchÚ?
  12. PerchÚ nell'applicazione che un'automazione restare in memoria al termine il programma?
  13. ╚ possibile sapere che cosa si desidera eseguire come utente dell'applicazione Microsoft Office, ma come a livello di programmazione utilizzando l'automazione?
  14. ╚ possibile automatizzare un'applicazione incorporata di Microsoft Office?
  15. Come Ŕ possibile accedere le proprietÓ di documento in un documento di Microsoft Office?

Domande e risposte

  1. Che cos'Ŕ automazione?

    Automazione (precedentemente nota come automazione OLE) Ŕ una tecnologia che consente di usufruire di funzionalitÓ esistenti del programma e incorporare le proprie applicazioni. Ad esempio, Ŕ possibile utilizzare l'ortografia di Microsoft Word e la grammatica nell'applicazione senza verrÓ visibile agli utenti controllo. ╚ anche possibile utilizzare tutti gli strumenti di creazione grafici, stampa e analisi dei dati di Microsoft Excel. Si tratta di una tecnologia in grado di semplificare e velocizzare le operazioni di sviluppo.
  2. Mi novitÓ di automazione, dove Ŕ possibile trovare buona risorse per ulteriori informazioni? Nel capitolo 24 dell'opera "Inside Visual C++" di David Kruglinski (ISBN:1-57231-565- 2) sono fornite descrizioni generali nonchÚ una grande quantitÓ di esempi. La Microsoft Knowledge Base Ŕ inoltre una fonte importante di informazioni. In questo articolo stesso Ŕ un buon inizio ed Ŕ possibile ottenere riferimenti pi¨ specifici nel seguente articolo della Microsoft Knowledge Base riportato di seguito:
    152023Individuazione delle risorse per l'automazione OLE di Studio
    Se si preferisce imparare dall'esempio, vedere il seguente articolo della Microsoft Knowledge Base riportato di seguito:
    179706HOWTO utilizzare MFC per automatizzare Excel e creare/formato una nuova cartella di lavoro
  3. Esistono diversi modi, ╚ possibile utilizzare l'automazione?

    Esistono tre modi principali, Ŕ possibile utilizzare l'automazione: MFC, # Import e C/C ++:

    • Con MFC, si utilizza la creazione guidata classe di Visual C++ per generare "classi wrapper" dalle librerie di tipi di Microsoft Office. Queste classi, cosý come altre classi MFC, quali COleVariant, COleSafeArray e COleException, semplificano le attivitÓ di automazione. Questo metodo Ŕ in genere consigliato rispetto agli altri e molti esempi riportati nella Microsoft Knowledge Base ne fanno uso.
    • # Import, una nuova direttiva Ŕ diventato disponibile con Visual c ++ 5.0 crea VC ++ "puntatori intelligenti" da una libreria dei tipi specificata. ╚ molto potente ma spesso non Ŕ consigliato a causa di riferimento-conteggio problemi che si verificano solitamente quando utilizzato con applicazioni di Microsoft Office.
    • L'automazione C/C++ Ŕ ancora pi¨ difficile ma a volte necessaria per evitare un sovraccarico con MFC o i problemi di #import. In sostanza si utilizzano API come CoCreateInstance() e interfacce COM come IDispatch e IUnknown.
    ╚ importante notare che esistono alcune lievi differenze tra l'automazione ottenuta con C++ e quella ottenuta con linguaggio C puro, perchÚ COM Ŕ stato sviluppato sulla base della classe di C++. Per ulteriori informazioni, vedere il seguente articolo della Microsoft Knowledge Base per un esempio C:
    181473HOWTO: Utilizzo dell'automazione OLE da un'applicazione C
  4. Che cos'Ŕ COM?

    Automazione Ŕ basato sul componente Object Model (COM). COM Ŕ un'architettura software standard basata su interfacce e progettato per avere codice separato in oggetti indipendenti. ╚ una specie di paradigma di programmazione orientata agli oggetti (OOP, Object Oriented Programming) applicabile per˛ ad applicazioni distinte e separate. Ogni oggetto espone una serie di interfacce e tutte le comunicazioni ad esso rivolte, ad esempio l'inizializzazione, le notifiche e il trasferimento di dati, avvengono tramite tali interfacce.

    COM Ŕ anche una serie di servizi forniti da librerie a collegamento dinamico (DLL, Dynamic-Link Library) installate insieme al sistema operativo. L'automazione si serve di molti di questi servizi. Un esempio Ŕ il servizio "marshalling", che riunisce le chiamate dell'applicazione client alle funzioni membro delle interfacce dell'applicazione server e le passa, unitamente ai rispettivi argomenti, all'applicazione server. Rende sembrare che le interfacce del server siano esposte in spazio di memoria del client non Ŕ il caso quando il client Ŕ un file exe in esecuzione in un proprio spazio di processo. Il servizio marshalling, inoltre, riceve i valori restituiti dai metodi del server attraverso i limiti elaborativi e li passa senza problemi alla chiamata del client. Molti altri servizi forniti dalle varie librerie COM sono di importanza essenziale per l'automazione. Fonti di informazioni su quelli includono "Inside OLE - seconda edizione" Kraig Brockschmidt, ISBN 1-55615-843-2, "Inside COM" da Dale Rogerson - ISBN 1-57231-349-8, e "automazione ADOX ()," ISBN 1-57231-584-9.
  5. Collegarsi all'istanza in esecuzione di un'applicazione di Office

    Utilizzare l'API GetActiveObject(). Server di automazione registrano nella tabella ROT (Running Object Table), tramite l'API RegisterActiveObject(). Client di automazione possono ottenere all'istanza in esecuzione con il codice, ad esempio:
          // 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();
    
    						
    Nota : se sono presenti pi¨ istanze in esecuzione dell'applicazione di Office si desidera allegare, solo sarÓ possibile connettersi alla prima istanza Ŕ stata avviata utilizzando l'API GetActiveObject().

    In teoria, si pu˛ scorrere la tabella ROT per ogni singola istanza, ma le applicazioni di Office non registrano automaticamente se un'altra istanza Ŕ giÓ nella tabella ROT perchÚ il moniker per se stesso Ŕ sempre lo stesso (impossibile essere distinti comunque). Ci˛ significa che Ŕ Impossibile connettersi a qualsiasi istanza fatta eccezione per il primo. Tuttavia, dal momento che le applicazioni di Office anche la registrazione i documenti nella tabella ROT, Ŕ possibile correttamente associare ad altre istanze scorrendo ROT cercando un documento specifico, connessione a, ottenendo quindi l'oggetto di applicazione da esso. Nel seguente articolo per l'iterazione tabella ROT e cercare il nome di un documento Ŕ un codice:
    190985HOWTO: Get IDispatch di un documento di Word o di Excel da un OCX
    Non necessario eseguire questa operazione per PowerPoint, perchÚ Ŕ un'applicazione a istanza singola, Ŕ possibile avere solo un'istanza di in esecuzione.
  6. Come Ŕ possibile passare i parametri facoltativi?

    Alcuni metodi dispongono di parametri "optional". In Visual Basic, Ŕ possibile in modo casuale ometterli quando si chiama il metodo. Tuttavia, quando si chiama con Visual c ++ Ŕ necessario passare un valore VARIANT speciali cui campo .VT Ŕ VT_ERROR e campo .SCODE Ŕ DISP_E_PARAMNOTFOUND. Vale a dire:
          // VARIANT used in place of optional-parameters.
          VARIANT varOpt;
          varOpt.vt = VT_ERROR;
          varOpt.scode = DISP_E_PARAMNOTFOUND;
    						
    Ŕ effettivamente le operazioni verranno eseguite background.
  7. Come si intercettare gli eventi esposti dalle applicazioni di Office?

    Fondamentalmente Ŕ implementare l'interfaccia eventi che si desidera rilevare ("sink") e l'installazione di una connessione consultiva con l'applicazione ("source"). Il seguente articolo consente di esempi dettagliati per fare in modo che Microsoft Word:
    183599HOWTO: Catch eventi di applicazioni Microsoft Word97 con VC ++
    In generale, per impostare la connessione consultiva, ottenere l'IConnectionPointContainer del server e chiamare FindConnectionPoint() con l'IID dell'interfaccia eventi. Questo fornisce un'interfaccia IConnectionPoint e tutto ci˛ che Ŕ a sinistra consiste nel chiamare Advise() con un'istanza dell'interfaccia eventi. Il server chiamerÓ nuovamente attraverso questa interfaccia quando si verificano questi eventi.
  8. Il codice di automazione Ŕ troppo lento. Come possibile velocizzare operazioni?

    Una causa comune di problemi di velocitÓ di automazione Ŕ con ripetitive di lettura e scrittura di dati. Si tratta di una situazione standard con i client di automazione di Excel. Tuttavia, la maggior parte delle persone non sono consapevoli che i dati in genere possono essere scritti o letti contemporaneamente utilizzando SAFEARRAY. Vedere i seguenti articoli della Microsoft Knowledge Base per ulteriori informazioni ed esempi informativi:
    186120HOWTO: Utilizzo di MFC per automatizzare Excel e riempire un intervallo con una matrice
    186122HOWTO: Utilizzo di MFC per automatizzare Excel e ottenere una matrice da un intervallo
    179706HOWTO: Utilizzo di MFC per automatizzare Excel e creare/formato una nuova cartella di lavoro
    Inoltre, Ŕ importante sottolineare che utilizzo Appunti pu˛ talvolta migliorare le prestazioni in. Ad esempio, Ŕ possibile copiare i dati negli Appunti, quindi utilizzare di automazione per indicare al server per incollare. O viceversa, indicare al server di copia negli Appunti e incollare in un'applicazione.
  9. Che cosa significano questi valori di errore di grandi dimensioni, ad esempio-2147352573 o 0x80030002?

    Questi valori sono noti come HRESULT e sono definiti in winerror.h. I numeri sono cosý grandi perchÚ il primo bit indica se Ŕ un errore. ╚ possibile utilizzare l'utilitÓ ErrLook.Exe fornito con Visual c ++ per convertire questi numeri in descrizioni significative.

    Se si desidera ottenere a livello di programmazione di una descrizione per gli errori, Ŕ possibile utilizzare l'API FormatMessage(). Vedere i seguenti articoli di Knowledge Base riportato di seguito per ulteriori informazioni ed esempi sull'utilizzo di FormatMessage():
    186063INFORMAZIONI: Conversione di errori di automazione per VB/VBA
    122957ESEMPIO: Decode32 e Decode16 OLE decodificatore codice errore strumenti
    Nota : se si utilizza Visual c ++ 6.0 e avere una variabile contenente il valore nella finestra di controllo di debug, aggiungere ", hr" (senza virgolette) in modo da disporre di Visual c ++ tradurre Ŕ!
  10. Che cos'Ŕ una libreria dei tipi?

    Una libreria di tipi Ŕ assimilabile a un file di intestazione C/C++. Contiene le interfacce, i metodi e le proprietÓ che vengono pubblicati da un server. ╚ possibile prendere visione della libreria di tipi con il visualizzatore di oggetti OLE/COM (Oleview.exe) incluso in Visual C++. Di seguito Ŕ un elenco dei nomi file libreria di tipi per Microsoft Office 95, 97 e 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. Il codice di automazione ha collaborato con Excel 95, ma non riesce con Excel 97. Ci˛ che accade?

    Il modello di oggetti di Excel apportato una modifica significativa da 95 a 97 versione. Excel 95 implementato tutti i relativi metodi e proprietÓ in una singola implementazione di IDispatch. Ci˛ significava che spesso Ŕ possibile chiamare metodi destinati all'oggetto X, da oggetto Y. Non Ŕ una buona progettazione, in modo che in Office 97, ogni oggetto dispone il proprio separare Idispatch implementazione. Ci˛ significa che se richiede un metodo o una proprietÓ dall'oggetto X da un oggetto separato, Y, viene visualizzato l'errore 0x80020003,-2147352573, "Membro non trovato". Per evitare questo errore, Ŕ necessario assicurarsi che l'interfaccia IDispatch sottostante che si effettuano chiamate dal sia quella corretta dal punto di vista semantico. Vedere i seguenti articoli della Microsoft Knowledge Base per ulteriori informazioni:
    172108HOWTO: Risoluzione dei problemi "Membro non trovato", 0x80020003 errore
  2. L'applicazione che un'automazione rimane in memoria al termine del programma. Ci˛ che accade?

    Pi¨ probabile, infatti si dimentica di rilasciare un'interfaccia acquisita e sarÓ necessario tenere traccia. Di seguito sono riportati alcuni suggerimenti generali e Cerca elementi:

    • Se si utilizza # import, Ŕ molto probabile che potrebbe essere in esecuzione in uno dei bug conteggio dei riferimenti associati. Spesso a volte i bug possono essere svolte intorno, ma in genere Ŕ preferibile utilizzare per utilizzare uno degli altri metodi di automazione. # import non funziona molto bene con le applicazioni Office, poichÚ le librerie dei tipi e l'utilizzo sono piuttosto complessi. Inoltre, tali problemi di conteggio di riferimento sono difficile tenere traccia verso il basso, poichÚ molte chiamate di COM il livello di interfaccia sono background quando si utilizza # import.
    • Verificare se si siano chiamando i metodi, quali Apri o nuovo, che restituiscono IDispatch * (LPDISPATCH) e ignorando il valore restituito. Se si Ŕ, quindi sono dell'abbandono di questa interfaccia restituita e sarÓ necessario modificare il codice in modo da rilasciare quando non Ŕ pi¨ necessario.
    • Gradualmente impostare come commento le sezioni del codice finchÚ il problema non viene pi¨ visualizzata, quindi aggiungerlo nuovamente con cautela per tenere traccia in cui inizia il problema.
    • Si noti che alcune applicazioni rimarrÓ in esecuzione se l'utente Ŕ "toccati" l'applicazione. In questo caso mentre si sta automatizzando, quindi l'applicazione probabilmente rimarrÓ in esecuzione in seguito. Le applicazioni di Office dispongono di una proprietÓ "UserControl" sull'oggetto Application che Ŕ possibile lettura/scrittura per modificare questo comportamento.
    • Inoltre, alcune applicazioni decide di rimanere in esecuzione se sufficiente interfaccia utente "azione" si Ŕ verificato. Se si ha intenzione la chiusura dell'applicazione, quindi chiamare il relativo metodo Quit() sull'oggetto Application. Word verrÓ arrestato indipendentemente dal relativo conteggio dei riferimenti quando viene chiamato Esci. Non Ŕ un comportamento COM previsto. Excel, tuttavia, verranno correttamente solo nascondere stesso ma rimanere in esecuzione finchÚ non vengono rilasciate tutte le interfacce in attesa. In generale, Ŕ necessario rilasciare tutti i riferimenti in sospeso e chiamare solo Quit() se si desidera che la chiusura dell'applicazione.
  3. ╚ possibile sapere che cosa si desidera eseguire come utente dell'applicazione Office, ma come a livello di programmazione tramite l'automazione?

    Che cosa si Ŕ interessati Ŕ quali oggetti, metodi e proprietÓ Ŕ necessario utilizzare. Il modo migliore per informazioni su come passare i modelli di oggetti di Word, Excel e PowerPoint, in base alle quali si desidera eseguire come utente, ha consiste di utilizzare il registratore macro. Solo scegliere di Macro\ "Registra nuova macro" dal menu Strumenti, eseguire l'attivitÓ Ŕ interessano, quindi scegliere Macro\ 'Interrompi registrazione". Al termine della registrazione, scegliere Macro\Macros dal menu Strumenti, selezionare la macro registrata, quindi fare clic su Modifica. Questo consente di accedere al codice VBA generato che consentano di eseguire l'attivitÓ che Ŕ stata registrata. Tenere presente la macro registrata non Ŕ il codice migliore possibile nella maggior parte dei casi, ma ci˛ Ŕ molto bene per un rapido esempio.
  4. ╚ possibile automatizzare un'applicazione di Office incorporata?

    Assolutamente. Il trucco Ŕ ottenere il puntatore IDispatch: questo Ŕ espresso in di Visual c ++ tecnica nota 39 (TN039). Vedere il seguente articolo della Microsoft Knowledge Base per un esempio dettagliato:
    184663HOWTO: Incorporare e automatizzare un foglio di lavoro Microsoft Excel con MFC
  5. Come Ŕ possibile accedere le proprietÓ di documento in un documento di Office?

    Le proprietÓ del documento sono accessibili tramite l'automazione, o direttamente tramite IPropertyStorage. Gli articoli della Knowledge Base riportato di seguito viene illustrato ogni metodo:
    179494HOWTO: Utilizzo dell'automazione per il recupero proprietÓ di documento incorporate
    186898HOWTO: Lettura di proprietÓ di documento composto direttamente con VC ++

ProprietÓ

Identificativo articolo: 196776 - Ultima modifica: giovedý 13 marzo 2008 - Revisione: 7.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
Chiavi:á
kbmt kbsweptvs2008 kbautomation kbfaq KB196776 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 196776
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com