Connessioni ADO con Excel

di Matteo Baldan, in Database,

Ci sono situazioni reali in cui Excel custodisce dati che dobbiamo in qualche modo estrarre.

Utilizzare Excel come fonte di dati è sconveniente innanzitutto perché non ammette accessi contemporanei. Excel è un programma che gestisce un foglio elettronico, lo fa anche molto bene, ma non nasce certo come database.

In ogni caso può capitare di doversi servire di Excel per gestire dati. In questo articolo vedremo come fare.

Definire una fonte di dati con Excel

Per creare una tabella con Excel bisogna inserire i nomi dei campi sulla prima riga (A1, B1, C1, D1, E1, ... del foglio excel.

Immagine

Quindi selezionare l'area contenente i record (ma non le colonne intere, non ci sarebbe spazio per inserire altri record) e dal menu inserisci scegliere nome e definisci dal menu contestuale.

Immagine

Nella finestra di dialogo assegnare un nome all'area e cliccare su aggiungi .

Connessione a Excel con ADO

Ci si può connettere ad una fonte di dati Excel per mezzo del Provider Microsoft Jet in questo modo:

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &_ Server.MapPath("NomedelFile.xls") & ";Extended Properties=Excel 8.0;" 

Extended Properties: devono essere settate in base alla versione del documento Excel facendo riferimento alla tabella seguente:

Versione Extended Properties
Excel 3.0 Excel 3.0;
Excel 4.0 Excel 4.0;
Excel 5.0/Excel 95 Excel 5.0;
Excel 97 Excel 97;
Excel 2000 Excel 8.0;

Extended Properties ammette la proprietà HDR che può essere settata sui valori Yes o No . HDR specifica se la prima riga dell'area selezionata (come precedentemente descritto) deve contenere i nomi delle colonne della sorgente di dati (Recordset). Se le viene assegnato il valore NO , il Provider Microsoft Jet assegna automaticamente i nomi ai campi. Se non le viene attribuito alcun valore il suo valore sarà Yes .

Ecco un esempio:

objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &_ Server.MapPath("NomedelFile.xls") & ";Extended Properties=Excel 8.0; HDR=NO;""

Operazioni sul Recordset

Dopo aver creato un'istanza dell'oggetto Recordset:

Set objRS = Server.CreateObject("ADODB.Recordset")

Si può accedere al contenuto del Recordset attraverso un'istruzione SQL:

SQL = "SELECT Nome, Anni FROM tb_elenco"
objRS.Open SQL, objConn

Oppure con ADO:

objRS.Open "tb_sms", objConn, , , adCmdTable

Non è possibile cancellare record dalla fonte di dati excel, molto probabilmente perché eliminare una riga da un foglio elettronico e sottrarre un record ad un database non sono due operazioni analoghe.

Invece non c'è nessun problema ad aggiornare i valori dei campi di un record:

SQL = "SELECT * FROM tb_elenco WHERE ID=1"
ObjRS.Open SQL, objconn, ,adLockOptimistic
ObjRS.Fields(0).value = "3"
ObjRS.Fields(1).value = "Dino"
ObjRS.Fields(1).value = "Bianco"
ObjRS.Fields(1).value = "023694687"
ObjRS.Update 

Oppure nell'inserire un nuovo record:

objRS.AddNew ObjRS.Fields(0).value = "3"
ObjRS.Fields(1).value = "Dino"
ObjRS.Fields(1).value = "Bianco"
ObjRS.Fields(1).value = "023694687"
ObjRS.Update 

Conclusioni

Excel non nasce per questi usi, sia chiaro, ma può capitare che all'interno di una intranet ci sia bisogno di estrarre, aggiornare o aggiungere dati.

Un sistema per farlo c'è, anche se presenta grossi limiti sia di scalabilità che di performance, da tenere sempre a mente quando si deciderà di utilizzare questa soluzione.

Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti