Introduzione
In certi scenari, può capitare di sviluppare applicazioni web o windows che devono interagire con Microsoft Excel 2010, senza utilizzare componenti di terze parti o riferimenti alla dll di quel programma.
La tecnica che vedremo in questo articolo può tornare utile, anche in quei contesti in cui non è installato Microsoft Excel.
Vedremo come rilevare i dati da Microsoft Excel 2010, tramite il linguaggio di programmazione VB.Net 2010 e C# 2010 utilizzando le classi messi a disposizione dallo spazio dei nomi OleDB.
Creazione del file Excel
Si crea un nuovo file Excel 2010, impostando nella cella A1 la parola Nome, mentre nella cella situata alla destra, ossia A2 inserire il valore Cognome, in questo modo abbiamo impostato il file Excel con due nomi di colonna.
Nella colonna nome, impostate dei valori a vostro piacimento, stessa cosa per la colonna cognome.
Salvate il file Excel, in una vostra cartella
Stesura di codice
Si crea un nuovo progetto di Visual Studio 2010, di tipo Windows application, aggiungiamo alla form un pulsante, impostando la proprietà name con il valore “BtnLeggi” e la proprietà text con il valore “Leggi”.
Passiamo in visualizzazione codice.
Per eseguire correttamente il codice, dobbiamo aggiungere lo spazio dei nomi relativo a oledb, in alto, sopra ad ogni dichiarazione, importiamo lo spazio dei nomi, come riportato qui di seguito.
VB.Net
Imports System.Data.OleDb
C#
using System.Data.OleDb;
Nell’evento click del pulsante scriviamo il codice utilizzando le classi oledbcommand, oledbconnection ed oledatareader tutte offerte dal namespace aggiunto in precedenza.
Queste classi, rispettivamente ci permettono di eseguire la query nel file excel, effettuare una connessione al database (Excel) ed ottenere il risultato.
Si riporta il codice completo dell’evento click del pulsante.
VB.Net
'Oggetto per effettuare la query Foglio1 indica il foglio della file Excel
Dim comm As OleDbCommand = New OleDbCommand("Select * from [Foglio1$];")
Dim excelLettura As OleDbDataReader
'Imposto la stringa di connesisione
Using conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\varie\\LetturaExcel.xlsx;Extended Properties=Excel 12.0 Xml;")
Try
'apro la connessione ed eseguo la query
conn.Open()
comm.Connection = conn
excelLettura = comm.ExecuteReader()
'per ogni record che trovo visualizzo a video il risultato
Dim Nome As String = ""
Dim Cognome As String = ""
While (excelLettura.Read())
Nome = excelLettura("Nome").ToString()
Cognome = excelLettura("Cognome").ToString()
MessageBox.Show("Nome: " + Nome + " Cognome: " + Cognome)
Application.DoEvents()
End While
excelLettura.Dispose()
comm.Dispose()
Catch ex As Exception
MessageBox.Show("Errore: " + ex.Message)
Finally
'chiudo la connessione
If (conn.State = ConnectionState.Open) Then conn.Close()
End Try
End Using
C#
OleDbConnection conn;
//Oggetto per effettuare la query Foglio1 indica il foglio della file Excel
OleDbCommand comm = new OleDbCommand("Select * from [Foglio1$];");
OleDbDataReader excelLettura;
//Imposto la stringa di connesisione
using (conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\varie\\LetturaExcel.xlsx;Extended Properties=Excel 12.0 Xml;"))
{
try
{
//apro la connessione ed eseguo la query
conn.Open();
comm.Connection = conn;
excelLettura = comm.ExecuteReader();
//per ogni record che trovo visualizzo a video il risultato
string Nome = "";
string Cognome = "";
while (excelLettura.Read())
{
Nome = excelLettura["Nome"].ToString();
Cognome = excelLettura["Cognome"].ToString();
MessageBox.Show("Nome: " + Nome + " Cognome: " + Cognome);
Application.DoEvents();
}
excelLettura.Dispose();
comm.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
finally
{
//chiudo la connessione
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
Come si vede dal codice appena illustrato, si crea un oggetto di tipo oledb connection, in questo modo si crea una connessione al file excel, da notare la stringa di connessione, in cui si utilizza il provider “Microsoft.ACE.OLEDB.12.0”
Con la classe oledbcommand, effettuamo la query, la query è una normale select, solo che il nome della tabella nel nostro caso è singolo foglio del file exel, e viene identificato tra parentesi quadrate con il nome del foglio.
Con la classe oledbdataReader, vegnono gestiti i dati, ottenuti dal metodo ExecuteREader.
I nomi delle colonne, impostate precedentemente, vengono usati come per una normale tabella di database per gestire i dati.
Conclusioni
L’articolo ha voluto illustrare al lettore una tecnica di come utilizzare il nuovo pacchetto Microsoft Excel 2010, per leggere i dati, senza referenziare il componente Com di Excel o altre librerie, ma utilizzarlo come fonti dati.
Non solo si possono effettuare le query di lettura, ma anche di aggiornamento ed inserimento dati.