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.
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.
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.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.