How to Associazione per server di automazione Office con Visual C# .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 302902 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato precedentemente pubblicato con il codice di riferimento I302902
Espandi tutto | Chiudi tutto

Sommario

Quando si automatizza un'applicazione quale un'applicazione Microsoft Office, le chiamate alle proprietÓ e ai metodi degli oggetti dell'applicazione Office devono essere connesse in qualche modo a tali oggetti. Il processo di connessione delle chiamate a proprietÓ e metodi agli oggetti che implementano tali proprietÓ e metodi Ŕ definito comunemente associazione. In Visual C# sono disponibili due tipi di associazione: associazione anticipata e associazione tardiva. Il tipo di associazione scelto pu˛ influire su molti aspetti del programma, incluse prestazioni, flessibilitÓ e semplicitÓ di gestione.

In questo articolo vengono spiegate e messe a confronto le associazioni anticipata e tardiva per client di automazione Visual C# e vengono forniti esempi di codice per entrambi i tipi di associazione.

Informazioni

Associazione anticipata

Con l'associazione anticipata, Visual C# utilizza le informazioni sul tipo disponibili per l'applicazione Office in questione per creare un'associazione diretta ai metodi o alla proprietÓ necessarie. Il compilatore pu˛ eseguire controlli dei tipi e della sintassi per assicurare che al metodo o alla proprietÓ vengano passati il numero e il tipo corretti di parametri e che il valore restituito sia del tipo previsto. PoichÚ in fase di esecuzione sono richieste meno operazioni per effettuare una chiamata a una proprietÓ o a un metodo, l'associazione anticipata Ŕ talvolta pi¨ rapida. Sebbene l'associazione anticipata possa essere pi¨ veloce, le differenze a livello di prestazioni rispetto all'associazione tardiva sono tuttavia irrisorie.

L'associazione tardiva ha lo svantaggio, seppur minore, di provocare eventuali problemi di incompatibilitÓ tra versioni. Si supponga ad esempio che un server di automazione quale Microsoft Excel 2002 introduca un nuovo metodo o una nuova proprietÓ non disponibile in Excel 2000 oppure modifichi una proprietÓ o un metodo esistenti. Tali modifiche potrebbero alterare il layout binario dell'oggetto e provocare problemi con un'applicazione Visual C# che utilizza le informazioni sul tipo di Excel 2002 per automatizzare Excel 2000. Per evitare questo inconveniente, quando si sviluppa e si verifica il client di automazione, Ŕ consigliabile utilizzare le informazioni sul tipo delle versioni precedenti dell'applicazione Office che si desidera supportare.

Di seguito Ŕ riportata la procedura per creare un client di automazione che utilizza l'associazione anticipata. Come dimostra la procedura, con l'associazione anticipata Ŕ necessario fare riferimento alla libreria dei tipi per il client di automazione.

Creare un client di automazione che utilizza l'associazione anticipata

  1. Avviare Microsoft Visual Studio .NET. Scegliere Nuovo dal menu File, quindi scegliere Progetto. Selezionare Applicazione Windows dai tipi di progetto Visual C#. In base all'impostazione predefinita viene creato il progetto Form1.
  2. Aggiungere un riferimento alla Libreria oggetti di Microsoft Excel. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Microsoft Excel Object Library e scegliere Seleziona.

      NOTA: la Libreria oggetti di Microsoft Excel contiene un numero di versione. Il numero di versione per Excel 2000 Ŕ 9.0, mentre quello per Excel 2002 Ŕ 10.0.
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere .
  3. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la Casella degli strumenti e aggiungere un pulsante a Form1.
  4. Fare doppio clic su Button1. VerrÓ visualizzata la finestra del codice del form.
  5. Nella finestra del codice sostituire il codice seguente
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    con:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application objApp;
    	Excel._Workbook objBook;
    	Excel.Workbooks objBooks;
    	Excel.Sheets objSheets;
    	Excel._Worksheet objSheet;
    	Excel.Range range;
    
    	try
    	{
    		// Instantiate Excel and start a new workbook.
    		objApp = new Excel.Application();
    		objBooks = objApp.Workbooks;
    		objBook = objBooks.Add( Missing.Value );
    		objSheets = objBook.Worksheets;
    		objSheet = (Excel._Worksheet)objSheets.get_Item(1);
    
    		range = objSheet.get_Range("A1", Missing.Value);
    
    		//Set the range value.
    		//EXCEL9 Use:
    		range.Value = "Hello, World!";
    		//EXCEL10 Use:
    		//range.set_Value(Missing.Value, "Hello, World!" );
    
    		//Return control of Excel to the user.
    		objApp.Visible = true;
    		objApp.UserControl = true;
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    } 
    NOTA: come affermato in precedenza, questo codice utilizza la libreria di oggetti di Excel versione 9.0. Se durante l'aggiunta di riferimenti al progetto si Ŕ selezionata la Libreria oggetti di Microsoft Excel 10.0 anzichÚ la versione 9.0, individuare nel codice i commenti che contengono "//Excel10" e rimuovere il commento dalla riga o righe di codice alle quali si riferisce il commento. Analogamente, individuare nel codice i commenti che contengono "//Excel9" e aggiungere il commento alla riga o righe di codice alle quali si riferisce il commento.

  6. con: Scorrere verso l'alto la pagina del codice. Aggiungere la riga seguente alla fine dell'elenco di direttive using:
    using System.Reflection; 

Associazione tardiva

A differenza dell'associazione anticipata, con l'associazione tardiva si attende fino alla fase di esecuzione per associare le chiamate a proprietÓ e metodi ai rispettivi oggetti. A tal scopo, l'oggetto di destinazione deve implementare una speciale interfaccia COM: IDispatch. Il metodo IDispatch::GetIDsOfNames consente a Visual C# di interrogare un oggetto sui metodi e sulle proprietÓ che supporta e il metodo IDispatch::Invoke consente quindi a Visual C# di effettuare la chiamata a tali metodi e proprietÓ. L'associazione tardiva ha il vantaggio di rimuovere alcune delle dipendenze dalla versione che riguardano invece l'associazione anticipata. Presenta tuttavia lo svantaggio di rimuovere i controlli in fase di compilazione dell'integritÓ del codice di automazione, nonchÚ di non fornire alcuna funzionalitÓ Intellisense per la correzione di chiamate a metodi e proprietÓ.

Per utilizzare l'associazione tardiva in Visual C#, utilizzare il metodo System.Type.InvokeMember. Tale metodo effettua la chiamata a IDispatch::GetIDsOfNames e IDispatch::Invoke per associare i metodi e le proprietÓ del server di automazione.

Creare un client di automazione che utilizza l'associazione tardiva

  1. Avviare Microsoft Visual Studio .NET. Scegliere Nuovo dal menu File, quindi scegliere Progetto. Selezionare Applicazione Windows dai tipi di progetto Visual C#. In base all'impostazione predefinita viene creato il progetto Form1.
  2. Aggiungere un riferimento alla Libreria oggetti di Microsoft Excel. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. Scegliere Aggiungi riferimento dal menu Progetto.
    2. Nella scheda COM individuare Microsoft Excel Object Library e scegliere Seleziona.

      NOTA: la Libreria oggetti di Microsoft Excel contiene un numero di versione. Il numero di versione per Excel 2000 Ŕ 9.0, mentre quello per Excel 2002 Ŕ 10.0.
    3. Scegliere OK nella finestra di dialogo Aggiungi riferimento per confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere .
  3. Scegliere Casella degli strumenti dal menu Visualizza per visualizzare la Casella degli strumenti e aggiungere un pulsante a Form1.
  4. Fare doppio clic su Button1. VerrÓ visualizzata la finestra del codice del form.
  5. Nella finestra del codice sostituire il codice seguente
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    con:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object objApp_Late;
    	object objBook_Late;
    	object objBooks_Late;
    	object objSheets_Late;
    	object objSheet_Late;
    	object objRange_Late;
    	object[] Parameters;
    
    	try
    	{
    		// Instantiate Excel.
    		objApp_Late = (object)new Excel.Application();
    
    		//Get the workbooks collection.
    		objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", 
    		BindingFlags.GetProperty, null, objApp_Late, null );
    
    		//Add a new workbook.
    		objBook_Late = objBooks_Late.GetType().InvokeMember( "Add", 
    			BindingFlags.InvokeMethod, null, objBooks_Late, null );
    
    		//Get the worksheets collection.
    		objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    			BindingFlags.GetProperty, null, objBook_Late, null );
    
    		//Get the first worksheet.
    		Parameters = new Object[1];
    		Parameters[0] = 1;
    		objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item", 
    			BindingFlags.GetProperty, null, objSheets_Late, Parameters );
    
    		//Get a range object that contains cell A1.
    		Parameters = new Object[2];
    		Parameters[0] = "A1";
    		Parameters[1] = Missing.Value;
    		objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    			BindingFlags.GetProperty, null, objSheet_Late, Parameters );
    
    		//Write "Hello, World!" in cell A1.
    		Parameters = new Object[1];
    		Parameters[0] = "Hello, World!";
    		objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
    			null, objRange_Late, Parameters );
    
    		//Return control of Excel to the user.
    		Parameters = new Object[1];
    		Parameters[0] = true;
    		objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    		objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }
  6. con: Scorrere verso l'alto la pagina del codice. Aggiungere la riga seguente alla fine dell'elenco di direttive using:
    using System.Reflection; 

Riferimenti

Per ulteriori informazioni, visitare il seguente sito Web Microsoft Developer Network (MSDN)(informazioni in lingua inglese):
Microsoft Office Development with Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Per ulteriori informazioni sull'associazione, fare clic sui numeri degli articoli della Microsoft Knowledge Base riportati di seguito (gli articoli con prefisso "Q" contengono informazioni in inglese):
245115 INFO: Using Early Binding and Late Binding in Automation
244167 INFO: Writing Automation Clients for Multiple Office Versions
247579 INFO: Use DISPID Binding to Automate Office Applications Whenever Possible

ProprietÓ

Identificativo articolo: 302902 - Ultima modifica: venerdý 29 giugno 2007 - Revisione: 5.1
Le informazioni in questo articolo si applicano a
  • Microsoft Visual C# .NET 2002 Standard Edition
Chiavi:á
kbhowto kbautomation kboutlook kbaccess _ik11561 kbword kbexcel kbgrpdso KB302902
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