Al momento sei offline in attesa che la connessione Internet venga ristabilita

Office automazione tramite Visual c ++

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
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 ++
COleDispatchDriver colesafearray colevariant _com_ptr_t _com_variant_t IPropertySetStorage

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 196776 - Ultima revisione: 03/13/2008 20:13:39 - Revisione: 7.0

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

  • kbmt kbsweptvs2008 kbautomation kbfaq KB196776 KbMtit
Feedback
="https://c1.microsoft.com/c.gif?DI=4050&did=1&t=">p;did=1&t=">