mercoledì 4 marzo 2009

Utilizzare excel da visual basic net

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.










Download esempio

3 commenti:

Anonimo ha detto...

Interessante, pero devo sistemare il link per il download de3ll'esempio,non funziona

Emanuele ha detto...

Purtroppo lo spazio web su cui stava l'esempio non è più raggiungibile.
Grazie per la segnalazione.

Anonimo ha detto...


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