Access
 sql >> Database >  >> RDS >> Access

Parametri della stringa di connessione per origini dati Excel

Parametri della stringa di connessione per origini dati Excel

Nell'articolo precedente, ho discusso di come possiamo trattare Excel e file di testo come se fossero un database utilizzando DAO e come aprirli senza collegarli. Poiché non utilizzano driver ODBC, la loro stringa di connessione verrà formattata in modo molto diverso da quello che potresti essere abituato a vedere per una stringa di connessione ODBC. C'è una carenza di documentazione sui parametri della stringa di connessione di Excel. Questo è uno sforzo migliore per coprire alcune lacune e discutere le ramificazioni dei parametri.

Parametri della stringa di connessione di Excel

Anche se abbiamo 3 diversi "tipi" di origine dati:

  1. Excel 8.0 :file xls 97-2003
  2. Excel 12.0 :file xlsb
  3. Excel 12.0 Xml :file xlsx

Usano tutti gli stessi parametri.

Ecco l'elenco dei parametri:

HDR parametro:riga di intestazione

YES :La prima riga è l'intestazione e dovrebbe diventare i nomi delle colonne per la "tabella"/"recordset"
NO :La prima riga non viene trattata in modo diverso ed è solo un dato. Tutti i nomi delle colonne saranno denominati "FN" dove "N" è un numero che inizia con 1

IMEX parametro:comportamento di importazione/esportazione

Questo determina come definire i tipi di dati delle colonne, in base al contenuto:
1 :se la colonna contiene tipi di dati diversi, trattala come una stringa. In caso contrario, abbina la colonna al miglior tipo di dati.
2 :abbina sempre la colonna a un determinato tipo di dati in base al campione. Ciò potrebbe causare un errore di lettura quando leggiamo una riga che contiene dati che non corrispondono al tipo di dati previsto.

ACCDB parametro:indica che Access utilizza il formato file ACCDB?

Per impostazione predefinita, questo è sempre impostato ACCDB=YES in un formato di file accdb. Tuttavia, ometterlo o impostarlo su NO sembra non fare nulla. È un po' un mistero. Se qualcuno può condividere l'effetto di questo parametro, posta nei commenti e aggiornerò il blog.

DATABASE:percorso della cartella di lavoro di Excel

Il parametro deve contenere un percorso completo, incluso il nome della cartella di lavoro.

Stringa di connessione minima funzionante

Si noti che DATABASE è l'unico parametro obbligatorio oltre alla parola chiave dell'origine del tipo di dati. Pertanto una stringa di connessione minima funzionante può essere:

Excel 8.0;DATABASE=C:\Links\Products.xls

Specifica del foglio o dell'intervallo nella stringa di connessione

Nell'esempio precedente, hai visto che un foglio rappresentava un "DAO.TableDef “. Tuttavia, i fogli di lavoro non sono l'unica cosa che può essere un "Tabledef “. Se il foglio di calcolo di Excel contiene un intervallo denominato, l'intervallo denominato verrà segnalato come "Tabledef " anche. Inoltre, possiamo "interrogare" un blocco arbitrario nel foglio utilizzando l'indirizzo della cella. Ad esempio:

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")
Set rs = db.OpenRecordsset("Sheet$1A1:A3")

Debug.Print rs.Name, rs.Fields.Count

È importante notare che gli indirizzi delle celle non possono superare l'intervallo utilizzato dal foglio. Ad esempio, il Products.xlsx in realtà ha contenuto solo in A1:B3, ciò significa che se apri un recordset utilizzando Sheet1$A1:D5, ottieni comunque solo 2 per il conteggio dei campi e 3 per il conteggio dei record. Le colonne/righe vuote extra vengono semplicemente ignorate. D'altra parte, se hai sporcato una cella da qualche parte al di fuori di A1:B3 , il UsedRange del foglio ora sarà più grande e le query includeranno colonne e righe vuote.

Quindi sono nomi validi da usare in una query su un “database” di Excel:

  1. Sheet1$ – Intero intervallo utilizzato di un foglio di lavoro.
  2. Sheet1$A1:B4 – Solo 2 colonne e 3 righe (senza contare l'intestazione), a condizione che i contenuti siano riempiti. In caso contrario, le colonne o le righe potrebbero essere inferiori a quanto richiesto.
  3. ProductsRange – l'intervallo denominato con quel nome.

Trovo molto più bello usare intervalli denominati dove pratico in quanto ciò assicura che non si stia codificando gli indirizzi nel codice, specialmente se l'intervallo viene spostato a causa dell'inserimento di nuove colonne o righe da parte dell'utente ma non alterando il contenuto dell'intervallo denominato . Tuttavia non è sempre pratico, soprattutto se stai ricevendo fogli di calcolo da una terza parte e quindi non hai il controllo sui suoi contenuti o formati. In questo caso, anche scrivere una query SQL può funzionare.

Interrogazione dell'origine dati di Excel

Supponiamo di non poter controllare il formato e di non voler fare affidamento sull'indirizzo assoluto anche se siamo certi che alcune colonne e righe saranno effettivamente presenti. In quella situazione, la cosa migliore da fare è interrogare. Ecco un esempio che seleziona solo una riga:

  Dim db As DAO.Database
  Set db = DBEngine.OpenDatabase(vbNullString, False, False, "Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Links\Products.xlsx")

  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("SELECT d.[Count] FROM [Sheet1$] AS d WHERE d.[Products] = 'Bananas';")
  Debug.Print rs.Fields(0).Value

Si spera che tu possa vedere che è molto più facile che scorrere su ogni riga per trovare quale ha "Banane" e quindi leggere la colonna a destra per ottenere il conteggio. In questo caso, l'interrogazione batte l'automazione di Excel.

Conclusione

Hai visto che DAO ci rende molto facile lavorare con l'origine dati Excel e fingere che fosse un'origine dati relazionale e utilizzare il nostro linguaggio di query preferito e oggetti DAO familiari invece di scrivere un mucchio di codice VBA automatizzando Excel per trovare il dati che vogliamo. I parametri della stringa di connessione sono abbastanza semplici e finché hai il percorso, sei adatto per collegare o aprire un foglio di calcolo Excel.

Nel prossimo articolo esamineremo i parametri di connessione dei file di testo.