Introduzione a VSTO per Excel (Video 3 di 6)
Indice
- Introduzione
- Cos'è VSTO
- Ambiente di sviluppo
- Modellazione degli oggetti di Excel
- Oggetto Applicazione
- Oggetto Cartella di lavoro
- Oggetto Foglio di lavoro
- Oggetto Intervallo
- Assemblee non gestite e gestite
- Utilizzo delle diverse assembly
- Esempi di codice
- Oggetto Applicazione
- Impostare e cancellare la barra di stato
- Calcolare il foglio di lavoro
- Utilizzo delle funzioni di Excel
- Oggetto Cartella di lavoro
- Aggiungere una nuova cartella di lavoro
- Aprire una cartella di lavoro esistente
- Salvare e chiudere una cartella di lavoro
- Ciclare tra le cartelle di lavoro aperte
- Oggetto Foglio di lavoro
- Aggiungere un nuovo foglio di lavoro
- Ottenere un riferimento a un foglio di lavoro
- Rinominare, riordinare ed eliminare un foglio di lavoro
- Ciclare tra i fogli di lavoro
- Oggetto Intervallo
- Ottenere un riferimento all'intervallo attivo
- Ottenere un riferimento all'intervallo tramite indirizzo
- Scrivere e leggere valori nelle celle
- Formattare gli intervalli
- Uso degli oggetti con un AddIn di Excel
- Conclusioni
📜 Introduzione
Benvenuti a questo video di Excel Dev Studio! In questo video, vi presenteremo il mondo di VSTO (Visual Studio Tools for Office). Scoprirete come sviluppare soluzioni per estendere le funzionalità di Excel. Se non avete ancora visto i video precedenti, vi consigliamo di farlo per avere una panoramica completa di VSTO e delle sue potenzialità.
🤔 Cos'è VSTO
Prima di addentrarci nei dettagli, è importante capire cos'è VSTO. VSTO sta per Visual Studio Tools for Office ed è un set di strumenti sviluppati da Microsoft che permettono di creare soluzioni personalizzate per Excel utilizzando il framework di sviluppo di Visual Studio. Queste soluzioni permettono di estendere le funzionalità di Excel e automatizzare operazioni complesse.
🔧 Ambiente di sviluppo
Prima di iniziare lo sviluppo con VSTO, è necessario configurare l'ambiente di sviluppo. Per poter utilizzare VSTO, è necessario avere installato Visual Studio e il pacchetto di sviluppo per Office. Una volta effettuate queste installazioni, sarà possibile iniziare a creare soluzioni per Excel utilizzando VSTO.
📚 Modellazione degli oggetti di Excel
Per poter utilizzare VSTO per estendere le funzionalità di Excel, è fondamentale comprendere la struttura del modello degli oggetti di Excel. Gli oggetti principali che andremo ad utilizzare sono:
Oggetto Applicazione
L'oggetto Applicazione rappresenta l'applicazione di Excel stessa. Attraverso questo oggetto, si possono ottenere informazioni sull'applicazione, sulle azioni applicate all'istanza corrente e sull'utilizzo degli oggetti aperti all'interno dell'applicazione.
Oggetto Cartella di lavoro
L'oggetto Cartella di lavoro rappresenta una singola cartella di lavoro all'interno dell'applicazione di Excel. Questo oggetto fa parte della collezione di Cartelle di lavoro.
Oggetto Foglio di lavoro
L'oggetto Foglio di lavoro rappresenta un singolo foglio di lavoro all'interno di una cartella di lavoro. Anche in questo caso, l'oggetto Foglio di lavoro fa parte di una collezione di Fogli di lavoro.
Oggetto Intervallo
L'oggetto Intervallo è l'oggetto che utilizzeremo maggiormente all'interno di un'applicazione Excel. Questo oggetto rappresenta una cella, una riga, una colonna o una selezione di celle. Grazie all'oggetto Intervallo, potremo manipolare e gestire i dati all'interno delle celle.
📦 Assemblee non gestite e gestite
Un altro aspetto importante da comprendere è la differenza tra le assemblee non gestite e le assemblee gestite. Le assemblee non gestite sono utilizzate per comunicare con il modello degli oggetti di Excel mediante l'utilizzo di COM interop. Le assemblee gestite, invece, implementano le proprietà, i metodi e gli eventi definiti dalle assemblee non gestite e permettono di sviluppare soluzioni personalizzate utilizzando VSTO.
🤝 Utilizzo delle diverse assembly
Per utilizzare le diverse assemblee nel nostro progetto VSTO, è necessario fare il riferimento alle assembly nel nostro progetto. Ad esempio, se vogliamo utilizzare l'oggetto Applicazione di Excel, dobbiamo fare il riferimento all'assembly Microsoft.Office.Interop.Excel
. Allo stesso modo, se vogliamo utilizzare gli oggetti VSTO di Excel, dobbiamo fare il riferimento all'assembly Microsoft.Office.Tools.Excel
. Fortunatamente, Visual Studio aggiunge automaticamente i riferimenti alle assembly necessarie quando creiamo una soluzione VSTO per Excel.
🔧 Esempi di codice
Ora che abbiamo una buona comprensione del modello degli oggetti di Excel e delle assembly da utilizzare, possiamo passare ad alcuni esempi di codice che mostrano come utilizzare gli oggetti di Excel con VSTO.
Oggetto Applicazione
Impostare e cancellare la barra di stato
Per impostare un messaggio sulla barra di stato dell'applicazione, possiamo utilizzare la proprietà StatusBar
dell'oggetto Applicazione. Ad esempio, se vogliamo impostare il messaggio "Elaborazione in corso..." sulla barra di stato, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.StatusBar = "Elaborazione in corso...";
Per cancellare il messaggio dalla barra di stato, possiamo semplicemente impostare la proprietà StatusBar
su una stringa vuota:
Globals.ThisAddIn.Application.StatusBar = "";
Calcolare il foglio di lavoro
Per calcolare il foglio di lavoro, possiamo utilizzare il metodo Calculate
dell'oggetto Foglio di lavoro. Ad esempio, se vogliamo calcolare le formule del foglio di lavoro attivo, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveSheet.Calculate();
In alternativa, se vogliamo ricalcolare tutte le cartelle di lavoro aperte, possiamo utilizzare il metodo CalculateFull
dell'oggetto Applicazione:
Globals.ThisAddIn.Application.CalculateFull();
Utilizzo delle funzioni di Excel
Per utilizzare le funzioni di Excel all'interno del nostro codice, possiamo utilizzare la proprietà WorksheetFunction
dell'oggetto Applicazione. Ad esempio, se vogliamo utilizzare la funzione SOMMA per sommare due numeri, possiamo utilizzare il seguente codice:
double result = Globals.ThisAddIn.Application.WorksheetFunction.Sum(5, 10);
In questo esempio, stiamo utilizzando il metodo Sum
dell'oggetto WorksheetFunction
per sommare i numeri 5 e 10.
Oggetto Cartella di lavoro
Aggiungere una nuova cartella di lavoro
Per aggiungere una nuova cartella di lavoro, possiamo utilizzare il metodo Add
della collezione di Cartelle di lavoro. Ad esempio, se vogliamo aggiungere una nuova cartella di lavoro vuota, possiamo utilizzare il seguente codice:
Excel.Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Add();
Questo codice crea una nuova cartella di lavoro e la assegna a una variabile di tipo Workbook
.
Aprire una cartella di lavoro esistente
Per aprire una cartella di lavoro esistente, possiamo utilizzare il metodo Open
della collezione di Cartelle di lavoro. Ad esempio, se vogliamo aprire il file "Workbook1.xlsx", possiamo utilizzare il seguente codice:
Excel.Workbook existingWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(@"C:\Path\To\Workbook1.xlsx");
In questo caso, dobbiamo specificare il percorso completo del file, compreso il nome del file con l'estensione.
Salvare e chiudere una cartella di lavoro
Per salvare una cartella di lavoro, possiamo utilizzare il metodo Save
dell'oggetto Cartella di lavoro. Ad esempio, se vogliamo salvare la cartella di lavoro attiva, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.Save();
Per salvare una cartella di lavoro con un nuovo nome o in un percorso diverso, possiamo utilizzare il metodo SaveAs
dell'oggetto Cartella di lavoro. Ad esempio, se vogliamo salvare la cartella di lavoro attiva con il nome "NuovoWorkbook.xlsx", possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.SaveAs(@"C:\Path\To\NuovoWorkbook.xlsx");
Per chiudere una cartella di lavoro, possiamo utilizzare il metodo Close
dell'oggetto Cartella di lavoro. Ad esempio, se vogliamo chiudere la cartella di lavoro attiva, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.Close();
È importante notare che, quando chiudiamo una cartella di lavoro, dobbiamo assicurarci di salvare le modifiche apportate in precedenza.
Ciclare tra le cartelle di lavoro aperte
Per ciclare tra le cartelle di lavoro aperte, possiamo utilizzare un ciclo foreach
sulla collezione di Cartelle di lavoro. Ad esempio, se vogliamo elencare i nomi di tutte le cartelle di lavoro aperte, possiamo utilizzare il seguente codice:
foreach (Excel.Workbook workbook in Globals.ThisAddIn.Application.Workbooks)
{
Console.WriteLine(workbook.Name);
}
In questo esempio, stiamo stampando il nome di ogni cartella di lavoro sulla console.
Oggetto Foglio di lavoro
Aggiungere un nuovo foglio di lavoro
Per aggiungere un nuovo foglio di lavoro, possiamo utilizzare il metodo Add
della collezione di Fogli di lavoro. Ad esempio, se vogliamo aggiungere un nuovo foglio di lavoro alla cartella di lavoro attiva, possiamo utilizzare il seguente codice:
Excel.Worksheet newWorksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.Add();
Questo codice crea un nuovo foglio di lavoro e lo assegna a una variabile di tipo Worksheet
.
Ottenere un riferimento a un foglio di lavoro
Per ottenere un riferimento a un foglio di lavoro esistente, possiamo utilizzare i metodi get_Item
o get_ItemByName
della collezione di Fogli di lavoro. Ad esempio, se vogliamo ottenere un riferimento al primo foglio di lavoro della cartella di lavoro attiva, possiamo utilizzare il seguente codice:
Excel.Worksheet firstWorksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(1);
In questo caso, stiamo ottenendo un riferimento al primo foglio di lavoro utilizzando l'indice 1
. È importante notare che l'indice degli oggetti di Excel inizia da 1
, non da 0
.
Rinominare, riordinare ed eliminare un foglio di lavoro
Per rinominare un foglio di lavoro, possiamo utilizzare la proprietà Name
dell'oggetto Foglio di lavoro. Ad esempio, se vogliamo rinominare il primo foglio di lavoro con il nome "NuovoFoglio", possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(1).Name = "NuovoFoglio";
Per riordinare un foglio di lavoro, possiamo utilizzare il metodo Move
dell'oggetto Foglio di lavoro. Ad esempio, se vogliamo spostare il primo foglio di lavoro come secondo foglio di lavoro, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(1).Move(After: Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(2));
In questo caso, stiamo spostando il primo foglio di lavoro come secondo foglio di lavoro utilizzando il metodo Move
. Dobbiamo specificare il foglio di lavoro precedente al quale vogliamo spostare il foglio di lavoro corrente.
Per eliminare un foglio di lavoro, possiamo utilizzare il metodo Delete
dell'oggetto Foglio di lavoro. Ad esempio, se vogliamo eliminare il terzo foglio di lavoro, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(3).Delete();
Ciclare tra i fogli di lavoro
Per ciclare tra i fogli di lavoro, possiamo utilizzare un ciclo foreach
sulla collezione di Fogli di lavoro. Ad esempio, se vogliamo elencare i nomi di tutti i fogli di lavoro della cartella di lavoro attiva, possiamo utilizzare il seguente codice:
foreach (Excel.Worksheet worksheet in Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets)
{
Console.WriteLine(worksheet.Name);
}
In questo esempio, stiamo stampando il nome di ogni foglio di lavoro sulla console.
Oggetto Intervallo
Ottenere un riferimento all'intervallo attivo
Per ottenere un riferimento all'intervallo attivo (ovvero la cella selezionata dall'utente), possiamo utilizzare la proprietà ActiveCell
dell'oggetto Applicazione. Ad esempio, se vogliamo ottenere un riferimento all'intervallo attivo, possiamo utilizzare il seguente codice:
Excel.Range activeRange = Globals.ThisAddIn.Application.ActiveCell;
Questo codice ci restituirà un riferimento all'intervallo attivo, che possiamo utilizzare per accedere ai suoi valori e proprietà.
Ottenere un riferimento all'intervallo tramite indirizzo
Per ottenere un riferimento a un intervallo di celle specifico, possiamo utilizzare il metodo Range
dell'oggetto Foglio di lavoro. Ad esempio, se vogliamo ottenere un riferimento all'intervallo di celle A1:B2 del foglio di lavoro attivo, possiamo utilizzare il seguente codice:
Excel.Range range = Globals.ThisAddIn.Application.ActiveSheet.Range["A1:B2"];
In questo caso, stiamo utilizzando la notazione degli intervalli per specificare l'intervallo di celle desiderato.
Scrivere e leggere valori nelle celle
Per scrivere un valore in una specifica cella, possiamo assegnarlo alla proprietà Value2
dell'oggetto Intervallo. Ad esempio, se vogliamo scrivere il valore "Hello, world!" nella cella A1 del foglio di lavoro attivo, possiamo utilizzare il seguente codice:
Globals.ThisAddIn.Application.ActiveSheet.Range["A1"].Value2 = "Hello, world!";
In questo caso, stiamo assegnando il valore "Hello, world!" alla cella A1 utilizzando l'oggetto Intervallo specificato dalla notazione degli intervalli.
Per leggere un valore da una specifica cella, possiamo accedere alla proprietà Value2
dell'oggetto Intervallo. Ad esempio, se vogliamo leggere il valore dalla cella A1 del foglio di lavoro attivo, possiamo utilizzare il seguente codice:
string value = (string)Globals.ThisAddIn.Application.ActiveSheet.Range["A1"].Value2;
In questo caso, stiamo leggendo il valore dalla cella A1 e, poiché sappiamo che il valore è una stringa, lo stiamo convertendo esplicitamente a stringa.
Formattare gli intervalli
Per formattare un intervallo di celle, possiamo utilizzare le proprietà e i metodi dell'oggetto Intervallo. Ad esempio, se vogliamo impostare lo stile di grassetto e il colore di sfondo per l'intervallo di celle A1:C3 del foglio di lavoro attivo, possiamo utilizzare il seguente codice:
Excel.Range range = Globals.ThisAddIn.Application.ActiveSheet.Range["A1:C3"];
range.Font.Bold = true;
range.Interior.Color = Excel.XlRgbColor.rgbRed;
In questo caso, stiamo impostando il testo in grassetto e il colore di sfondo rosso per l'intervallo di celle A1:C3.
📚 Uso degli oggetti con un AddIn di Excel
Fino ad ora, abbiamo esaminato come utilizzare gli oggetti di Excel con una personalizzazione a livello di documento. Tuttavia, possiamo utilizzare gli stessi oggetti anche con un AddIn di Excel. La principale differenza è che il codice degli AddIn è disponibile per tutti i fogli di lavoro aperti, non solo per uno specifico foglio di lavoro.
Per utilizzare gli oggetti di Excel con un AddIn, è necessario fare alcune modifiche al codice. Ad esempio, invece di ThisWorkbook
, dobbiamo utilizzare Globals.ThisAddIn.Application.ActiveWorkbook
per ottenere un riferimento alla cartella di lavoro attiva. Inoltre, per ottenere un riferimento a un oggetto VSTO anziché a un oggetto PIA, dobbiamo utilizzare il metodo GetVstoObject()
.
Con queste modifiche, possiamo utilizzare gli stessi oggetti e metodi per estendere le funzionalità di Excel con un AddIn.
🎉 Conclusioni
In questo articolo, abbiamo esaminato come utilizzare gli oggetti di Excel con VSTO per estendere le funzionalità di Excel. Abbiamo esaminato il modello degli oggetti di Excel, le differenze tra le assemblee non gestite e gestite, e come utilizzare gli oggetti per scrivere codice personalizzato. Abbiamo anche esaminato come utilizzare gli oggetti di Excel con un AddIn e le modifiche necessarie al codice. Speriamo che questo articolo vi abbia fornito una buona comprensione di come utilizzare gli oggetti di Excel con VSTO.