sql >> Base de Datos >  >> RDS >> Access

Parámetros de cadena de conexión para orígenes de datos de Excel

Parámetros de cadena de conexión para fuentes de datos de Excel

En el artículo anterior, discutí cómo podemos tratar archivos de Excel y de texto como si fueran una base de datos usando DAO, y cómo podemos abrirlos sin vincularlos. Debido a que no utilizan controladores ODBC, su cadena de conexión tendrá un formato bastante diferente al que podría estar acostumbrado a ver para una cadena de conexión ODBC. Hay escasez de documentación sobre los parámetros de la cadena de conexión de Excel. Este es un mejor esfuerzo para cubrir algunas de las lagunas y analizar las ramificaciones de los parámetros.

Parámetros de cadena de conexión de Excel

Aunque tenemos 3 "tipos" de fuentes de datos diferentes:

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

Todos usan los mismos parámetros.

Aquí está la lista de parámetros:

HDR parámetro:fila de encabezado

YES :La primera fila es el encabezado y debe convertirse en los nombres de columna para la "tabla"/"conjunto de registros"
NO :La primera fila no se trata de manera diferente y es solo un dato. Todos los nombres de las columnas se llamarán "FN", donde "N" es un número que comienza con 1

IMEX parámetro:comportamiento de importación/exportación

Esto rige cómo se deben definir los tipos de datos de columna, según el contenido:
1 :si la columna contiene diferentes tipos de datos, trátela como una cadena. De lo contrario, haga coincidir la columna con el mejor tipo de datos.
2 :haga coincidir siempre la columna con un determinado tipo de datos en función de la muestra. Eso puede causar un error de lectura cuando leemos una fila que contiene datos que no coinciden con el tipo de datos esperado.

ACCDB parámetro:¿Indica que Access está usando el formato de archivo ACCDB?

De forma predeterminada, siempre se establece ACCDB=YES en un formato de archivo accdb. Sin embargo, omitirlo o establecerlo en NO parece no hacer nada. Es un poco misterioso. Si alguien puede compartir el efecto de este parámetro, publíquelo en un comentario y actualizaré el blog.

BASE DE DATOS:Ruta al libro de Excel

El parámetro debe contener una ruta completa, incluido el nombre del libro.

Cadena de conexión de trabajo mínima

Tenga en cuenta que DATABASE es el único parámetro obligatorio además de la palabra clave de origen del tipo de datos. Por lo tanto, una cadena de conexión de trabajo mínima puede ser:

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

Especificación de hoja o rango en la cadena de conexión

En el ejemplo anterior, vio que una hoja representaba un "DAO.TableDef “. Sin embargo, las hojas de trabajo no son lo único que puede ser un "Tabledef “. Si la hoja de cálculo de Excel contiene un rango con nombre, el rango con nombre se informará como "Tabledef " así como. Además, podemos "consultar" un bloque arbitrario en la hoja usando la dirección de la celda. Por ejemplo:

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

Es importante tener en cuenta que las direcciones de las celdas no pueden exceder el rango utilizado de la hoja. Por ejemplo, Products.xlsx solo tiene contenido en A1:B3, lo que significa que si abre un conjunto de registros usando Sheet1 $ A1:D5, solo obtiene 2 para el recuento de campos y 3 para el recuento de registros. Las columnas/filas en blanco adicionales simplemente se ignoran. Por otro lado, si ensuciaste una celda en algún lugar fuera del A1:B3 , el UsedRange de la hoja ahora será más grande y la consulta incluirá columnas y filas en blanco.

Por lo tanto, esos son nombres válidos para usar en una consulta en una "base de datos" de Excel:

  1. Sheet1$ – Todo el rango usado de una hoja de cálculo.
  2. Sheet1$A1:B4 – Solo 2 columnas y 3 filas (sin contar cabecera), siempre que se rellene el contenido. De lo contrario, las columnas o filas pueden ser menos de lo solicitado.
  3. ProductsRange – el rango nombrado con ese nombre.

Me parece mucho más agradable usar rangos con nombre donde sea práctico, ya que esto garantiza que no esté codificando las direcciones en su código, especialmente si el rango se mueve debido a que el usuario inserta nuevas columnas o filas pero no altera el contenido del rango con nombre . Sin embargo, no siempre es práctico, especialmente si recibe hojas de cálculo de un tercero y, por lo tanto, no tiene control sobre su contenido o formato. En este caso, escribir una consulta SQL también puede funcionar.

Consultando la fuente de datos de Excel

Supongamos que no podemos controlar el formato y no queremos confiar en la dirección absoluta, aunque estamos seguros de que ciertas columnas y filas estarán presentes. En esa situación, lo mejor que puede hacer es consultar. Aquí hay un ejemplo que selecciona solo una fila:

  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

Con suerte, puede ver que esto es mucho más fácil que iterar sobre cada fila para encontrar cuál tiene "Bananas" y luego leer la columna a la derecha para obtener el conteo. En este caso, las consultas superan a la automatización de Excel.

Conclusión

Ha visto que DAO hace que sea muy fácil para nosotros trabajar con la fuente de datos de Excel y pretender que se trata de una fuente de datos relacional y usar nuestro lenguaje de consulta favorito y objetos DAO familiares en lugar de escribir un montón de código VBA automatizando Excel para encontrar el datos que queremos. Los parámetros de la cadena de conexión son bastante sencillos y siempre que tenga la ruta, es bueno para vincular o abrir una hoja de cálculo de Excel.

En el próximo artículo veremos los parámetros de conexión de archivos de texto.