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

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

Questo articolo è stato precedentemente pubblicato con il codice di riferimento I302902
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
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 comunementeassociazione. In Visual C# sono disponibili due tipi di associazione:associazione anticipataeassociazione 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. ScegliereNuovodal menuFile, quindi scegliereProgetto. SelezionareApplicazione Windowsdai tipi di progetto Visual C#. In base all'impostazione predefinita viene creato il progetto Form1.
  2. Aggiungere un riferimento allaLibreria oggetti di Microsoft Excel. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. ScegliereAggiungi riferimentodal menuProgetto.
    2. Nella schedaCOMindividuareMicrosoft Excel Object Librarye scegliereSeleziona.

      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. ScegliereOKnella finestra di dialogoAggiungi riferimentoper confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere.
  3. ScegliereCasella degli strumentidal menuVisualizzaper visualizzare la Casella degli strumenti e aggiungere un pulsante a Form1.
  4. Fare doppio clic suButton1. 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 direttiveusing:
    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 metodoIDispatch::GetIDsOfNamesconsente a Visual C# di interrogare un oggetto sui metodi e sulle proprietà che supporta e il metodoIDispatch::Invokeconsente 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 metodoSystem.Type.InvokeMember. Tale metodo effettua la chiamata aIDispatch::GetIDsOfNameseIDispatch::Invokeper 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. ScegliereNuovodal menuFile, quindi scegliereProgetto. SelezionareApplicazione Windowsdai tipi di progetto Visual C#. In base all'impostazione predefinita viene creato il progetto Form1.
  2. Aggiungere un riferimento allaLibreria oggetti di Microsoft Excel. Per eseguire questa operazione, attenersi alla seguente procedura:
    1. ScegliereAggiungi riferimentodal menuProgetto.
    2. Nella schedaCOMindividuareMicrosoft Excel Object Librarye scegliereSeleziona.

      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. ScegliereOKnella finestra di dialogoAggiungi riferimentoper confermare le selezioni. Se viene richiesto di generare wrapper per le librerie selezionate, scegliere.
  3. ScegliereCasella degli strumentidal menuVisualizzaper visualizzare la Casella degli strumenti e aggiungere un pulsante a Form1.
  4. Fare doppio clic suButton1. 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 direttiveusing:
    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
early-binding late-binding early bound early-bound late-bound Excel Word PowerPoint Outlook
Proprietà

ID articolo: 302902 - Ultima revisione: 12/06/2015 03:44:26 - Revisione: 5.1

  • Microsoft Visual C# .NET 2002 Standard Edition
  • kbnosurvey kbarchive kbhowto kbautomation kboutlook kbaccess _ik11561 kbword kbexcel kbgrpdso KB302902
Feedback