sql >> Databáze >  >> RDS >> Access

Parametry připojovacího řetězce pro zdroje dat aplikace Excel

Parametry připojovacího řetězce pro zdroje dat aplikace Excel

V předchozím článku jsem se zabýval tím, jak můžeme zacházet s Excelem a textovými soubory, jako by to byly databáze pomocí DAO, a jak je můžeme otevřít bez propojení. Protože nepoužívají ovladače ODBC, jejich připojovací řetězec bude formátován zcela odlišně od toho, co jste možná zvyklí vidět u připojovacího řetězce ODBC. Existuje nedostatek dokumentace o parametrech připojovacího řetězce aplikace Excel. Toto je nejlepší snaha pokrýt některé mezery a diskutovat o důsledcích parametrů.

Parametry připojovacího řetězce aplikace Excel

I když máme 3 různé „typy“ zdrojů dat:

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

Všechny používají stejné parametry.

Zde je seznam parametrů:

HDR parametr:řádek záhlaví

YES :První řádek je záhlaví a měl by se stát názvy sloupců pro „table“/“recordset“
NO :S prvním řádkem se nezachází jinak a je to pouze údaj. Všechny názvy sloupců budou pojmenovány „FN“, kde „N“ je číslo začínající 1

IMEX parametr:Import/Export Behavior

To určuje, jak by měly být definovány datové typy sloupců na základě obsahu:
1 :Pokud sloupec obsahuje různé datové typy, zacházejte s ním jako s řetězcem. V opačném případě přiřaďte sloupec nejlepšímu datovému typu.
2 :Vždy přiřaďte sloupec k určitému datovému typu na základě vzorku. To může způsobit chybu při čtení, když čteme řádek obsahující data, která neodpovídají očekávanému datovému typu.

ACCDB parametr:Označuje, že Access používá formát souboru ACCDB?

Ve výchozím nastavení je toto vždy nastaveno na ACCDB=YES ve formátu souboru accdb. Zdá se však, že jeho vynechání nebo nastavení na NE nic neudělá. Je to trochu záhada. Pokud se někdo může podělit o vliv tohoto parametru, napište do komentáře a já aktualizuji blog.

DATABÁZE:Cesta k excelovému sešitu

Parametr by měl obsahovat plně kvalifikovanou cestu včetně názvu sešitu.

Minimálně funkční připojovací řetězec

Všimněte si, že DATABASE je jediným povinným parametrem kromě klíčového slova zdroj dat. Minimální pracovní připojovací řetězec proto může být:

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

Určení listu nebo rozsahu v řetězci připojení

V předchozí ukázce jste viděli, že list představuje „DAO.TableDef “. Listy však nejsou jedinou věcí, která může být „Tabledef “. Pokud tabulka Excel obsahuje pojmenovaný rozsah, bude pojmenovaný rozsah hlášen jako „Tabledef " také. Navíc můžeme „dotazovat“ libovolný blok v listu pomocí adresy buňky. Například:

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

Je důležité si uvědomit, že adresy buněk nemohou překročit použitý rozsah listu. Například Products.xlsx ve skutečnosti má obsah pouze v A1:B3, to znamená, že pokud otevřete sadu záznamů pomocí List1$A1:D5, stále získáte pouze 2 pro počet polí a 3 pro počet záznamů. Nadbytečné prázdné sloupce/řádky jsou jednoduše ignorovány. Na druhou stranu, pokud jste zašpinili buňku někde mimo A1:B3 , UsedRange listu bude nyní větší a dotazování by pak zahrnovalo prázdné sloupce a řádky.

Jedná se tedy o platná jména pro použití v dotazu v „databázi“ Excelu:

  1. Sheet1$ – Celý použitý rozsah listu.
  2. Sheet1$A1:B4 – Pouze 2 sloupce a 3 řádky (bez záhlaví), za předpokladu, že je obsah vyplněn. V opačném případě může být počet sloupců nebo řádků menší, než je požadováno.
  3. ProductsRange – pojmenovaný rozsah s tímto názvem.

Považuji za mnohem hezčí používat pojmenované rozsahy tam, kde je to praktické, protože to zajišťuje, že adresy ve svém kódu nekódujete napevno, zejména pokud se rozsah přesouvá kvůli tomu, že uživatel vkládá nové sloupce nebo řádky, ale nemění obsah pojmenovaného rozsahu. . Není to však vždy praktické, zvláště pokud přijímáte tabulky od třetí strany a nemáte tedy žádnou kontrolu nad jejich obsahem nebo formáty. V tomto případě může fungovat i psaní SQL dotazu.

Dotaz na zdroj dat aplikace Excel

Předpokládejme, že nemůžeme ovládat formát a nechceme se spoléhat na absolutní adresu, i když jsme si jisti, že určité sloupce a řádky budou ve skutečnosti přítomny. V takové situaci je nejlepší se zeptat. Zde je příklad výběru pouze jednoho řádku:

  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

Doufejme, že vidíte, že je to mnohem snazší, než opakovat jednotlivé řádky, abyste zjistili, který z nich má „Banány“, a poté číst sloupec doprava, abyste získali počet. V tomto případě dotazování překonává automatizaci Excelu.

Závěr

Viděli jste, že DAO nám velmi usnadňuje práci se zdrojem dat Excel a předstírat, jako by to byl relační zdroj dat, a používat náš oblíbený dotazovací jazyk a známé objekty DAO místo psaní hromady kódu VBA automatizující Excel k nalezení data, která chceme. Parametry připojovacího řetězce jsou poměrně jednoduché, a pokud máte cestu, můžete propojit nebo otevřít excelovou tabulku.

V příštím článku se podíváme na parametry připojení textového souboru.


  1. Proč vytváříte pohled v databázi?

  2. Jaké jsou případy použití pro výběr CHAR před VARCHAR v SQL?

  3. Oracle zkopíruje data do jiné tabulky

  4. jak zjistit velikost řádku v tabulce