Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
C# offre funzionalità che migliorano la programmazione di Microsoft Office. Tra le utili funzionalità di C# sono disponibili gli argomenti denominati e facoltativi e i valori restituiti di tipo dynamic. Nella programmazione COM è possibile omettere la parola chiave ref e accedere alle proprietà indicizzate.
Entrambi i linguaggi consentono di incorporare informazioni sul tipo, in modo da distribuire gli assembly che interagiscono con i componenti COM senza distribuire assembly di interoperabilità primari (PIA) al computer dell'utente. Per altre informazioni, vedere Procedura dettagliata: Incorporamento dei tipi da assembly gestiti.
In questa procedura dettagliata queste funzionalità vengono illustrate nel contesto della programmazione di Office, ma molte di esse sono utili anche nella programmazione generale. Nella procedura dettagliata si usa un componente aggiuntivo di Excel per creare una cartella di lavoro di Excel. A questo punto si crea un documento di Word contenente un collegamento alla cartella di lavoro. Infine, si visualizzerà come la dipendenza dell'assembly di interoperabilità primario può essere abilitata e disabilitata.
Importante
VSTO (Visual Studio Tools per Office) si basa su .NET Framework. Anche i componenti aggiuntivi COM possono essere scritti con .NET Framework. Non è possibile creare componenti aggiuntivi per Office con .NET Core e .NET 5+, le versioni più recenti di .NET. Ciò è dovuto al fatto che .NET Core/.NET 5+ non può funzionare insieme a .NET Framework nello stesso processo e può causare errori di caricamento dei componenti aggiuntivi. È possibile continuare a usare .NET Framework per scrivere VSTO e i componenti aggiuntivi COM per Office. Microsoft non aggiornerà VSTO o la piattaforma dei componenti aggiuntivi COM per l'uso di .NET Core o .NET 5+. È possibile utilizzare .NET Core e .NET 5+, incluso ASP.NET Core, per creare il lato server dei componenti aggiuntivi Web di Office.
Prerequisiti
Per completare questa procedura dettagliata è necessario aver installato Microsoft Office Excel o Microsoft Office Word nel computer.
Nota
I nomi o i percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Configurare l'applicazione di un componente aggiuntivo di Excel
- Avviare Visual Studio.
- Scegliere Nuovo dal menu Filee quindi selezionare Progetto.
- Nel riquadro Modelli installati, espandere C#, espandere Office e quindi selezionare l'anno della versione del prodotto Office.
- Nel riquadro Modelli, selezionare Componente aggiuntivo di Excel <versione>.
- Verificare che nella parte superiore del riquadro Modelli sia visualizzato .NET Framework 4, o una versione successiva, nella casella Framework di destinazione.
- Se opportuno, digitare un nome per il progetto nella casella Nome.
- Seleziona OK.
- Il nuovo progetto verrà visualizzato in Esplora soluzioni.
Aggiungere riferimenti
- In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto, quindi scegliere Aggiungi riferimento. Verrà visualizzata la finestra di dialogo Aggiungi riferimento.
- Nella scheda Assembly selezionare Microsoft.Office.Interop.Excel, versione
<version>.0.0.0(per conoscere il numero versione del prodotto Office, vedere Versioni Microsoft) nell'elenco Nome componente. Tenere premuto CTRL e selezionare Microsoft.Office.Interop.Word,version <version>.0.0.0. Se gli assembly non sono visibili, potrebbe essere necessario installarli (vedere Procedura: Installare assembly di interoperabilità primari di Office). - Seleziona OK.
Aggiungere le istruzioni Imports o le direttive using necessarie
In Esplora soluzioni, fare clic con il pulsante destro del mouse sul file ThisAddIn.cs, quindi selezionare Visualizza codice. Aggiungere le seguenti direttive using (C#) all'inizio del file di codice, se non sono già presenti.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Creare un elenco di conti correnti bancari
In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto, selezionare Aggiungi e quindi selezionare Classe. Assegnare alla classe il nome Account.cs. Selezionare Aggiungi. Sostituire la definizione della classe Account con il codice seguente. Le definizioni delle classi usano le proprietà implementate automaticamente.
class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
Per creare un elenco bankAccounts contenente due account, aggiungere il codice seguente al metodo ThisAddIn_Startup in ThisAddIn.cs. Le dichiarazioni dell'elenco usano gli inizializzatori di insieme.
var bankAccounts = new List<Account>
{
new Account
{
ID = 345,
Balance = 541.27
},
new Account
{
ID = 123,
Balance = -127.44
}
};
Esportare i dati in Excel
Nello stesso file, aggiungere il metodo seguente alla classe ThisAddIn. Il metodo configura una cartella di lavoro di Excel e vi esporta i dati.
void DisplayInExcel(IEnumerable<Account> accounts,
Action<Account, Excel.Range> DisplayFunc)
{
var excelApp = this.Application;
// Add a new Excel workbook.
excelApp.Workbooks.Add();
excelApp.Visible = true;
excelApp.Range["A1"].Value = "ID";
excelApp.Range["B1"].Value = "Balance";
excelApp.Range["A2"].Select();
foreach (var ac in accounts)
{
DisplayFunc(ac, excelApp.ActiveCell);
excelApp.ActiveCell.Offset[1, 0].Select();
}
// Copy the results to the Clipboard.
excelApp.Range["A1:B3"].Copy();
}
- Il metodo Add usa un parametro facoltativo per specificare un modello particolare. Un parametro facoltativo consente di omettere l'argomento per tale parametro se si vuole usare il valore predefinito del parametro. Poiché l'esempio precedente non include argomenti,
Addusa il modello predefinito e crea una nuova cartella di lavoro. L'istruzione equivalente nelle precedenti versioni di C# richiede un argomento segnaposto:excelApp.Workbooks.Add(Type.Missing). Per altre informazioni, vedere Argomenti denominati e facoltativi. - Le proprietà
RangeeOffsetdell'oggetto Range usano la funzionalità delle proprietà indicizzate. Questa funzionalità consente di usare tali proprietà dai tipi COM con la tipica sintassi di C# seguente. Le proprietà indicizzate consentono anche di usare la proprietàValuedell'oggettoRange, eliminando la necessità di usare la proprietàValue2. La proprietàValueè indicizzata, ma l'indice è facoltativo. Nell'esempio seguente sono presenti sia argomenti facoltativi sia proprietà indicizzate.
// Visual C# 2010 provides indexed properties for COM programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();
Non è possibile creare proprietà indicizzate personalizzate. La funzionalità supporta solo l'utilizzo di proprietà indicizzate esistenti.
Aggiungere il seguente codice alla fine di DisplayInExcel per regolare la larghezza delle colonne in modo da adattarle al contenuto.
excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();
Queste aggiunte dimostrano un'altra nuova funzionalità di C#: considerare i valori Object restituiti dagli host COM, ad esempio Office, come se il tipo fosse dynamic. Gli oggetti COM vengono gestiti automaticamente come dynamic, quando Incorpora tipi di interoperabilità ha il valore predefinito, True o, analogamente, quando si fa riferimento all'assembly con l'opzione del compilatore EmbedInteropTypes. Per altre informazioni sull'incorporamento dei tipi di interoperabilità, vedere le procedure "Trovare il riferimento all'assembly di interoperabilità primario" e "Ripristinare la dipendenza dell'assembly di interoperabilità primario" più avanti in questo articolo. Per altre informazioni su dynamic, vedere dynamic o Uso del tipo dinamico.
Richiamare DisplayInExcel
Aggiungere il codice seguente alla fine del metodo ThisAddIn_StartUp. La chiamata a DisplayInExcel contiene due argomenti. Il primo argomento è il nome dell'elenco di conti elaborati. Il secondo argomento è un'espressione lambda su più righe che definisce come elaborare i dati. I valori ID e balance per ogni conto vengono visualizzati in celle adiacenti e la riga viene visualizzata in rosso se il saldo è inferiore a zero. Per altre informazioni, vedere Espressioni lambda.
DisplayInExcel(bankAccounts, (account, cell) =>
// This multiline lambda expression sets custom processing rules
// for the bankAccounts.
{
cell.Value = account.ID;
cell.Offset[0, 1].Value = account.Balance;
if (account.Balance < 0)
{
cell.Interior.Color = 255;
cell.Offset[0, 1].Interior.Color = 255;
}
});
Premere F5 per eseguire il programma. Viene visualizzato un foglio di lavoro di Excel che contiene i dati dei conti.
Aggiungere un documento di Word
Aggiungere il seguente codice alla fine del metodo ThisAddIn_StartUp per creare un documento di Word contenente un collegamento alla cartella di lavoro di Excel.
var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Questo codice illustra diverse funzionalità di C#: la possibilità di omettere la parola chiave ref nella programmazione COM, gli argomenti denominati e gli argomenti facoltativi. Il metodo PasteSpecial è costituito da sette parametri, che sono tutti parametri per riferimento facoltativi. Gli argomenti denominati e facoltativi consentono di indicare i parametri a cui si vuol accedere per nome e di inviare argomenti solo a tali parametri. In questo esempio, gli argomenti indicano la creazione di un collegamento alla cartella di lavoro negli Appunti (parametro Link) e la visualizzazione del collegamento nel documento di Word come icona (parametro DisplayAsIcon). C# consente anche di omettere la parola chiave ref per questi argomenti.
Eseguire l'applicazione
Premere F5 per eseguire l'applicazione. Excel viene avviato e viene visualizzata una tabella che contiene le informazioni dei due conti in bankAccounts. Quindi verrà visualizzato un documento di Word contenente un collegamento alla tabella di Excel.
Pulire il progetto completato
In Visual Studio, selezionare Pulisci soluzione nel menu Compila. In caso contrario, il componente aggiuntivo verrà eseguito ogni volta che si apre Excel nel computer.
Trovare il riferimento all'assembly di interoperabilità primario
- Eseguire di nuovo l'applicazione, ma non selezionare Pulisci soluzione.
- Selezionare Start. Individuare Microsoft Visual Studio <versione> e aprire un prompt dei comandi per gli sviluppatori.
- Digitare
ildasmnella finestra del Prompt dei comandi per gli sviluppatori di Visual Studio e premere INVIO. Verrà visualizzata la finestra IL DASM. - Nel menu File della finestra IL DASM selezionare File>Apri. Fare doppio clic su Visual Studio <versione> e su Progetti. Aprire la cartella per il progetto e cercare nella cartella bin/Debug il file nome progetto.dll. Fare doppio clic su nome progetto.dll. Una nuova finestra consente di visualizzare gli attributi del progetto, oltre ai riferimenti ad altri moduli e assembly. L'assembly include gli spazi dei nomi
Microsoft.Office.Interop.ExceleMicrosoft.Office.Interop.Word. Per impostazione predefinita in Visual Studio, il compilatore importa i tipi necessari da un assembly di interoperabilità primario a cui si fa riferimento nell'assembly. Per altre informazioni, vedere Procedura: Visualizzare il contenuto dell'assembly. - Fare doppio clic sull'icona MANIFESTO. Viene visualizzata una finestra che include un elenco di assembly che contengono gli elementi a cui fa riferimento il progetto.
Microsoft.Office.Interop.ExceleMicrosoft.Office.Interop.Wordnon sono presenti nell'elenco. Poiché i tipi necessari per il progetto sono stati importati nell'assembly, non è necessario installare i riferimenti a un assembly di interoperabilità primario. L'importazione dei tipi nell'assembly semplifica la distribuzione. Gli assembly di interoperabilità primari non devono essere presenti nel computer dell'utente. Un'applicazione non richiede la distribuzione di una versione specifica di un assembly di interoperabilità primario. Le applicazioni possono funzionare con più versioni di Office, a condizione che in tutte le versioni siano presenti le API necessarie. Poiché la distribuzione di assembly di interoperabilità primari non è più necessaria, è possibile creare un'applicazione in scenari avanzati che sia compatibile con più versioni di Office, incluse le versioni precedenti. Il codice non può usare API non disponibili nella versione di Office in uso. Non è sempre chiaro se una determinata API era disponibile in una versione precedente. Non è consigliabile usare le versioni precedenti di Office. - Chiudere la finestra del manifesto e l'assembly.
Ripristinare la dipendenza dell'assembly di interoperabilità primario
- In Esplora soluzioni, selezionare il pulsante Mostra tutti i file. Espandere la cartella Riferimenti e scegliere Microsoft.Office.Interop.Excel. Premere F4 per visualizzare la finestra Proprietà.
- Nella finestra Proprietà impostare la proprietà Incorpora tipi di interoperabilità da True a False.
- Ripetere i passaggi 1 e 2 di questa procedura per
Microsoft.Office.Interop.Word. - In C#, commentare le due chiamate
Autofitalla fine del metodoDisplayInExcel. - Premere F5 per verificare che il progetto sia ancora eseguito correttamente.
- Ripetere i passaggi da 1 a 3 della procedura precedente per aprire la finestra dell'assembly. Notare che
Microsoft.Office.Interop.WordeMicrosoft.Office.Interop.Excelnon sono più presenti nell'elenco di assembly incorporati. - Fare doppio clic sull'icona MANIFESTO e scorrere l'elenco degli assembly di riferimento. Sia
Microsoft.Office.Interop.WordsiaMicrosoft.Office.Interop.Excelsono inclusi nell'elenco. Poiché l'applicazione fa riferimento agli assembly di interoperabilità primari di Excel e Word e la proprietà Incorpora tipi di interoperabilità è impostata su False, entrambi gli assembly devono esistere nel computer dell'utente finale. - In Visual Studio, selezionare Pulisci soluzione nel menu Compila per pulire il progetto completato.
Vedi anche
- Proprietà implementate automaticamente (C#)
- Inizializzatori di oggetto e di raccolta
- Visual Studio Tools per Office (VSTO)
- Argomenti denominati e facoltativi
- dynamic
- Uso del tipo dinamico
- Espressioni lambda (C#)
- Procedura dettagliata: Incorporamento delle informazioni sui tipi da assembly di Microsoft Office in Visual Studio
- Procedura dettagliata: Incorporamento dei tipi da assembly gestiti
- Procedura dettagliata: Creazione del primo componente aggiuntivo VSTO per Excel