Come leggere dati da un file Excel usando VB.NET e ADODB



Durante la mia vita da programmatore ho dovuto spesso imbattermi nel problema di far comunicare applicazioni differenti come VB.NET ed Excel. L’uso del createObject a livello server può dare dei problemi di sicurezza, invece l’oggetto ADODB non dà nessun problema di questo tipo.
Un’esempio dell’uso di ADODB è quello di leggere dati da un’applicazione Excel usando VB.NET. Passo dopo passo cerchiamo di capire il funzionamento del codice.

Supponiamo di avere un file Excel di nome c:Test.xls.
Supponiamo inoltre di aver aperto Visual Studio e aver creato un nuovo progetto.

Prima di poter usare ADODB bisogna creare il riferimento alla classe. Di seguito spieghiamo come fare.

Da Visual studio.NET clicchiamo, Project -> Add Reference… clicchiamo sul tab COM e selezioniamo Microsoft ActiveX Data Objects 2.7 Library.

Per verificare la corretta importazione della libreria, possiamo cambiare tab e andare su .NET e verifacre che ci sia ADODB.

A questo punto bisogna aggiungere la libreria tramite il comando Imports.

Importazione delle librerie.
Imports System.Data
Imports System.Data.OleDb
Imports ADODB

La prima cosa che dobbiamo fare è dichiarare le variabili che vogliamo usare nel programma. E’ buona norma dichiarare le variabili all’inizio del programma. Nel nostro caso useremo le seguenti variabili:

  • valore manterrà I valori letti dal file Excel.
  • strSql mantiene la stringa SQL usata per recuperare I valori dal file Excel.
  • cn è l’oggetto connessione.
  • adoRs è l’oggetto recordset.

Dichiarazione delle variabili
Dim cn As ADODB.Connection
Dim adoRs As ADODB.Recordset
Dim valore As String
Dim strSQL As String

Creiamo I nuovi oggetti connessione e recordset
cn = New ADODB.Connection
adoRs = New ADODB.Recordset

Creiamo adesso la stringa di connessione. Per prima cosa bisogna specificare il Provider, nel nostro caso “Microsoft.Jet.OLEDB.4.0”. Poi il file da cui prendere le informazioni c:Test.xls e la versione di Excel. Infine il tipo di cursore. La proprietà CursorLocation serve per stabilire la localizzazione di default dei cursori (ovvero i Recordset navigabili). Usare adUseClient significa che sarà il Client ad occuparsi di tutte le elaborazioni.

Creazione della stringa di connessione
With cn
.Provider = “Microsoft.Jet.OLEDB.4.0”
.ConnectionString = “Data Source=c:Test.xls;Extended Properties=Excel 8.0”
.CursorLocation = CursorLocationEnum.adUseClient
.Open()
End With

La stringa SQL è leggermente differente da quelle usate di solito. La clausola FROM ha bisogno di aggiungere le parentesi quadre e il nome dello sheet seguito da $.

Definizione della stringa SQL per il recupero dei dati
strSQL = “SELECT * FROM [Sheet1$]”

Creata la stringa SQL bisogna creare il recordset e cominciare a ciclare sui valori.
La variabile valore manterra i dati letti dal file Excel.

Ciclo sui valori trovati
With adoRs
.ActiveConnection = cn
.Open(strSQL)
.MoveFirst()
While Not .EOF
valore = adoRs(0).Value
.MoveNext()
End While
End With

A questo punto bisogna chiudere la connessione e chiudere il recordset.

Chiudo la connessione
cn.Close()
adoRs.Close()

Annunci sponsorizzati:

Ricerche effettuate:

  • materassi vB loc:IT
Condividi su Facebook Condividi su Twitter!
  • Code

    FANTASTICO!!!! GRAZIE 1000

  • gianmichele

    bell’esempio…ho solo una domanda:
    ma se faccio un programmino usando questo codice funziona indipendentemente dal fatto che sulle macchine di destinazione ci sia o meno l’office???

  • Alessio Testa

    Penso di si.. Anche se forse ti conviene scrivere su un file csv, che puoi aprire anche con notepad.

  • Ste

    ti confermo che puoi usarlo senza excel installato…devi solo installarti un componente…ma se ti fai il setup non hai problemi….

  • Alessandro

    Bello …. ma mi dice:
    Dim cn As ADODB.Connection
    Connection è ambiguo nello spazio dei nomi ADODB

    consigli? idee?
    grazie
    Alessandro

Pinterest