Leer, modificar e insertar datos en Excel con ADODB


Aunque Excel es en principio una Hoja de Calculo y no un Base de Datos, las conexiones con ADODB, nos pueden permitir hacer conexiones con bastantes tipos de documentos (hasta con texto plano), y si tenemos el proveedor instalado (se instala con el Office), podemos tratar con los datos de una hoja Excell como si fuera con una Tabla, lo que puede ser muy cómodo si tenemos que tratar datos con Excel.

En el ejemplo, primero se establece la conexión con el proveedor de Excel 2007 / 2010, otras conexiones podrían ser:

' Excel (DSN)
oConexion.open "Dsn=NOMBREDSN"

'Excel (OLEDB)
oConexion.open "Microsoft.Jet.OLEDB.4.0;Data Source=C:\DIRECTORIO\DB.XLS;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"

'Excel 2007 / 20010 (OLEDB)
oConexion.open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DIRECTORIO\DB.XLSX;Extended Properties="Excel 12.0;HDR=YES";"


El parámetro de la conexión HDR=YES, establece que la primera fila seleccionada, sean los nombres de las campos, es decir si en la primera fila hubiese tres celdas con los valores "Campo1", "Campo2" y "Campo3", podríamos acceder a los valores del resto de filas en nuestro ejemplo de forma oRs("Campo1"), oRs("Campo2") y oRs("Campo3").

Posteriormente se crea el objeto Recordset y se realiza la consulta. En el campo nombre de tabla, en el ejemplo [Hoja1$A1:ZZ999], pasa el nombre de la hoja, dolar '$' y el intervalo de los datos que queremos seleccionar, por ejemplo si quisiésemos seleccionar los siguientes datos:



Vemos que el rango comienza desde la fila 5, columna C (sombreados de azul), hasta la fila 8, columna E (sombreados de rojo), por lo que deberíamos poner algo como [Hoja2$C5:E8].

Posteriormente, se muestra el nombre de todos los campos y sus valores.

Por último se muestra como modificar un campo y como insertar uno nuevo y se cierran las conexiones.



Código:
<%@ Language=VBScript %>
<%
'Copyright © www.McAnam.com
'http://www.mcanam.com/articulos/ASP.php?id=10

Dim oConexion
Dim aDatos, aInserciones

Set oConexion = Server.CreateObject("ADODB.Connection")
oConexion.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\DIRECTORIO\DB.XLSX; Extended Properties=""Excel 12.0 Xml; HDR=YES"";"

Dim oRS
Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.Open "Select * from [Hoja1$A1:ZZ999]", oConexion, 3, 2, adCmdText

' Mostramos los nombres de los campos:
response.Write "<table><tr>"
For iCont = 0 to oRs.Fields.Count - 1
  Response.Write "<td>" &amp;amp;amp; oRs.Fields(iCont).name &amp;amp;amp; "<td/>"
Next
response.Write "</tr>"

' Mostramos todos los campos
Do While NOT oRs.EOF
    response.Write "<tr>"
    For iCont = 0 to oRs.Fields.Count - 1
        Response.Write "<td>" &amp;amp;amp; oRs.Fields(iCont) &amp;amp;amp; "<td/>"
    Next
    response.Write "</tr>"
    oRs.MoveNext
Loop

' Modificamos el primer campo
oRs.MoveFirst
oRs.Fields(0).value = "Campo1"
oRs.Update

' Creamos un nuevo campo
aDatos = Array(0, 1)
aInserciones = Array("Campo1", "Campo2")
oRs.AddNew aDatos, aInserciones

' Cerramos conexiones
oRs.Close
oConexion.Close

%>

Links relacionados:
Crear conexión a una BD (Base de Datos)
Método OPEN de ADODB para un Recordset, cómo usar y tipos de parámetros. Recorrer los datos
Crear origen de datos DSN para conexión ODBC
Funciones de conexión a bases de datos
Conectarse a una Base de Datos MySQL con PHP


Para cualquier duda, consulta, sugerencia, opinión, colaboración, etc; no dude en ponerse en contacto con nosotros

Copyright © 2002-2017 [McAnam]. Reservados todos los derechos.
www.mcanam.com