Excel è un prodotto molto diffuso, sia in azienda che nell’utente finale, viene utilizzato per fare calcoli matematici molto complessi, grafici, e la possibilità di aggiungere formule personalizzate.
Tale programma è diviso in fogli di lavoro, nei quali è possibile svolgere diverse operazioni.
Introduzione:
Questo articolo affronterà in modo semplice, la possibilità di interagire con Excel da Visual basic.Net, ma la tecnica affrontata, può essere utilizzata anche per altri prodotti della famiglia office (word, power point, access, ecc), in particolare vedremo come inserire del testo, nelle varie celle (intersezioni di righe e colonne), applicare un formato (grassetto, dimensione carattere, ecc) e inserire un grafico come mostrato nella
figura 1.
Può capitare che nei nostri programmi, dobbiamo interagire con excel, per far si, dobbiamo aver installato sulla macchina il prodotto Microsoft Excel.
Aggiungere il riferimento di Excel
Nel nostro progetto dobbiamo aggiungere il riferimento al componente excel, la procedura da seguire sarà la seguente.
Selezionare la voce aggiungi riferimento situata nel menu progetto, a questo punto si apre una finestra, nella quale sono visualizzati i nomi, le versioni ed il percorso dei componenti che sono installati sul nostro computer. Selezioniamo la linguetta Com e cerchiamo il componente Microsoft Excel 10.0 Object Library, dove 10 indica la versione di excel installata (in questo caso ho xp) 9 per la versione 2000 e così via per tutte le altre versioni, selezioniamo il componente e facciamo click sul pulsante seleziona, come mostrato in
figura 2 e sul pulsante ok per chiudere la finestra dando conferma.
In questo modo abbiamo aggiunto al nostro progetto un riferimento ad un componente che ci permette di utilizzare tale programma (excel nel nostro caso) per compiere alcune operazioni, tale componente lo troviamo nella finestra esplora soluzione espandendo la voce Reference tramite il click sul simbolo + come mostrato in
figura 3.
Creazione degli oggetti
Prima di creare gli oggetti, bisogna capire com’è fatto il programma excel a livello di programmazione.
Esso è diviso in varie parti, la principale è l’applicazione, ossia il programma dove all’interno ci sono gli altri oggetti, la cartella la quale contiene un insieme di fogli (da 1 a n) in essi si trovano le varie celle utilizzate per fare i calcoli.
Bisogna creare tre oggetti uno che rappresenti l’applicazione, un altro che rappresenta la cartella di lavoro, e l’ultimo che rappresenta il nostro foglio di calcolo.
Come si vede di seguito il codice deve essere simile a quello riportato qui di seguito:
'creo l'oggetto excel application il programma excel.
Dim XlaDati As Excel.Application
'creo l'oggetto per la gestione della cartella di lavoro
Dim XlwbDati As Excel.Workbook
'creo l'oggetto per la gestione del foglio di excel(es. foglio uno, foglio due)
Dim XlshDati As Excel.Worksheet
'instanzio l'oggetto application
XlaDati = CreateObject("Excel.Application")
'gestione degli errori
Try
'lo rendo visibile
XlaDati.Visible = True
'aggiungo una nuova cartella excel
XlwbDati = XlaDati.Workbooks.Add
'Mi posiziono sul foglio attivo
XlshDati = XlwbDati.ActiveSheet
Inserimento dei valori nelle celle
Mi creo un array il quale mi servirà per valorizzare alcune celle (posso utilizzare anche un dataset o altro), la proprietà name dell’oggetto sheet imposta il nome del foglio, la proprietà cells permette di identificare una cella, la quale a sua volta ha delle proprietà (grassetto, dimensione carattere, ecc) che tramite l’assegnazione del numero di colonne e riga possiamo impostare.
Come si vede di seguito il codice dev’essere simile a quello riportato qui di seguito:
contatore di excel
Dim IntConta As Integer
'eventuali titolo array
Dim StrTitoloExcel() As String = {"Cognome", "Nome", "Voto", "Città"}
'Imposto il nome del foglio
XlshDati.Name = “Esempio"
'valorizzo la prima riga
For IntConta = 0 To 3
With XlshDati.Cells(1, IntConta + 1)
'inserisco il valore
.value = StrTitoloExcel(IntConta)
'lo rendo in grassetto
.font.bold = True
'gli do la dimensione
.font.size = 14
'rendo la cella di dimensioni uguali al testo (autosize)
.EntireColumn.autofit()
End With
Next
'variabile che gestisce i dati anzichè un array possiamo utilizzare un dataset
Dim StrNomi(3, 4) As String
'per la colonna cognome
StrNomi(0, 1) = "Foti"
StrNomi(1, 1) = "Mattei"
StrNomi(2, 1) = "Foti"
'colonna nome
StrNomi(0, 2) = "Olga"
StrNomi(1, 2) = "Emanuele"
StrNomi(2, 2) = "Pino"
'per la colonna voti
StrNomi(0, 3) = "8"
StrNomi(1, 3) = "6"
StrNomi(2, 3) = "4"
'per la colonna città
StrNomi(0, 4) = "Reggio Calabria"
StrNomi(1, 4) = "Roma"
StrNomi(2, 4) = "Milano"
'variabile per la gestione delle righe
Dim IntContaRighe, IntContaColonne As Integer
'Ciclo per ogni riga
For IntContaRighe = 0 To 3
'ciclo per ogni colonna dove ci sono i dati
For IntContaColonne = 1 To 4
'le matrici inziano con 0 per ciò più due per le righe di excel
With XlshDati.Cells(IntContaRighe + 2, IntContaColonne)
.value = StrNomi(IntContaRighe, IntContaColonne)
.EntireColumn.autofit()
End With
Next
Next
Inserimento del grafico
A questo punto siamo arrivati alla parte più complessa, quella di inserire un grafico.
Per prima cosa dobbiamo selezionare i valori che ci interessano, tramite il metodo select dell’oggetto workbook, fatto ciò, dobbiamo inserire un grafico e indicare il tipo di grafico tramite la funzione SetSourceData a questo punto dobbiamo indicare in quale foglio di excel dev’èssere inserito (nuovo o sullo stesso) tramite la funzione location . Sarà nostro interesse aggiungere titoli, legende, ecc.
Come si vede di seguito il codice dev’essere simile a quello riportato qui di seguito:
'Seleziono i dati da utilizzare nel grafico
XlwbDati.Sheets("Dev Esempio").range("C2:C4", "B2:B4").select()
With XlshDati.Application
'aggiungo un grafico
.Charts.Add()
'il tipo di grafico
.ActiveChart.ChartType = Excel.XlChartType.xl3DColumnClustered
'i dati per il grafico
.ActiveChart.SetSourceData(Source:=XlwbDati.Sheets("Esempio").range("C2:C4", "B2:B4") _
, PlotBy:="xlColumns")
'Indico la leggenda
.ActiveChart.SeriesCollection(1).Name = "=""Voti"""
'Imposto il grafico nella pagine corrente
.ActiveChart.Location(Where:=Excel.XlChartLocation.xlLocationAsObject, Name:="Esempio")
'Imposto Il titolo del grafico
.ActiveChart.HasTitle = True
.ActiveChart.ChartTitle.Characters.Text = "Esempio"
'Imposto l'etichettà per l'asse x
.ActiveChart.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary).HasTitle = True
.ActiveChart.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary).AxisTitle.Characters.Text = "Nomi"
'imposto l'echtetta per l'asse y
.ActiveChart.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary).HasTitle = True
.ActiveChart.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary).AxisTitle.Characters.Text = "Voti"
End With
Tramite il metodo SaveAs dell’oggetto application, salvo il file:
'salvo il file
XlaDati.ActiveWorkbook.SaveAs(Environment.CurrentDirectory & "\EsempioExcel.xls", , , , , , Excel.XlSaveAsAccessMode.xlExclusive)
Conclusioni
Questo articolo a fornito alcune tecniche di come utilizzare i prodotti microsoft office (nel nostro caso excel) da qualsiasi applicazione scritta in Visual basic.Net. MA nulla esclude che si possono fare operazioni più complesse o utilizzare contemporaneamente più prodotti office.
3 commenti:
Interessante, pero devo sistemare il link per il download de3ll'esempio,non funziona
Purtroppo lo spazio web su cui stava l'esempio non è più raggiungibile.
Grazie per la segnalazione.
Emanuele ciao e grazie per questo articolo. Ho un piccolo problema: non capisco come mai con .Charts.Add() il grafico si posta giusto ma su un foglio "Grafico 1" anziché su "Esempio" e poi mi da un'eccezione "Incompatibilità tra tipi" sull'istruzione .ActiveChart.SetSourceData(Source:=XlwbDati.Sheets("Esempio").range("C2:C4", "B2:B4"), PlotBy:="xlColumns").
Sapresti dirmi da che cosa dipende ??
Grazie
Ciao
Posta un commento