Consulta y actualización de datos de Excel mediante ADO desde ASP
Resumen
En este artículo se muestra cómo consultar y actualizar información en una hoja de cálculo de Excel mediante Objetos de datos ActiveX (ADO) desde una página de Active Server Pages (ASP). En el artículo también se describen las limitaciones asociadas a este tipo de aplicación.
Importante
Aunque las aplicaciones ASP/ADO admiten el acceso multiusuario, una hoja de cálculo de Excel no lo hace. Por lo tanto, este método de consulta y actualización de información no admite el acceso simultáneo de varios usuarios.
Más información
Para acceder a los datos de la hoja de cálculo de Excel de este ejemplo, use microsoft ODBC Driver for Excel. Cree una tabla para acceder a los datos mediante la creación de un rango con nombre en la hoja de cálculo de Excel.
Pasos para crear una aplicación de ejemplo
Cree el ADOtest.xls de archivo de Excel con los siguientes datos en sheet1:
column1 columna 2 column3 Rr éste 15 Bb test 20 ee Obras 25 Nota:
Si una columna de la hoja de cálculo de Excel contiene texto y números, el controlador ODBC de Excel no puede interpretar correctamente qué tipo de datos debe ser la columna. Asegúrese de que todas las celdas de una columna son del mismo tipo de datos. Los tres errores siguientes pueden producirse si cada celda de una columna no es del mismo tipo o si tiene los tipos mezclados entre "text" y "general":
- Error "80040e21" Del proveedor OLE DB de Microsoft para controladores ODBC, las propiedades de la solicitud no pueden ser compatibles con este controlador ODBC.
- Error '80004005' del proveedor OLE DB de Microsoft para controladores ODBC La consulta no se puede actualizar porque no contiene columnas que se puedan buscar para usarlas como clave de esperanza.
- Error de actualización basada en consultas del proveedor OLE DB de Microsoft para controladores ODBC "80004005". No se encontró la fila que se va a actualizar.
Cree un rango con nombre, myRange1, en la hoja de cálculo:
- Resalte las filas y el área de columnas donde residen los datos.
- En el menú Insertar, seleccione Nombre y haga clic en Definir.
- Escriba el nombre myRange1 para el nombre del rango con nombre.
- Haga clic en Aceptar.
El rango con nombre myRange1 contiene los datos siguientes:
column1 columna 2 column3 Rr éste 15 Bb test 20 ee Obras 25 Nota:
- ADO supone que la primera fila de una consulta de Excel contiene los encabezados de columna. Por lo tanto, el rango con nombre debe incluir los encabezados de columna. Este comportamiento es diferente al de DAO.
- Los encabezados de columna no pueden ser un número. El controlador de Excel no puede interpretarlos y, en su lugar, devuelve una referencia de celda. Por ejemplo, un encabezado de columna de "F1" se interpretaría mal.
Cree un nombre de origen de datos del sistema ODBC (DSN) que apunte al archivo ADOTest.xls.
- En el Panel de control, abra el administrador de ODBC.
- En la pestaña DSN del sistema, haga clic en Agregar.
- Seleccione Controlador de Microsoft Excel (*.xls) y haga clic en Finalizar. Si esta opción no existe, debe instalar el controlador ODBC de Microsoft para Excel desde la instalación de Excel.
- Elija ADOExcel para el nombre del origen de datos.
- Asegúrese de que la versión está establecida en la versión correcta de Excel.
- Haga clic en "Seleccionar libro...", vaya al archivo ADOTest.xls y haga clic en Aceptar.
- Haga clic en el botón "Opciones>>" y desactive la casilla "Solo lectura".
- Haga clic en Aceptar y, a continuación, haga clic en Aceptar de nuevo.
Establezca permisos en el archivo ADOTest.xls.
Si se accede a la página de Active Server de forma anónima, debe asegurarse de que la cuenta anónima (IUSR_<MachineName>) tenga al menos acceso de lectura y escritura (RW) a la hoja de cálculo. Si desea eliminar información de la hoja de cálculo, debe conceder los permisos correspondientes.
Si va a autenticar el acceso a la página de Active Server, debe asegurarse de que todos los usuarios que acceden a la aplicación tienen los permisos adecuados.
Si no establece los permisos adecuados en la hoja de cálculo, recibirá un mensaje de error similar al siguiente:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Excel Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.
Cree una nueva página ASP y pegue el código siguiente:
<!-- Begin ASP Source Code --> <%@ LANGUAGE="VBSCRIPT" %> <% Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "ADOExcel" Set objRS = Server.CreateObject("ADODB.Recordset") objRS.ActiveConnection = objConn objRS.CursorType = 3 'Static cursor. objRS.LockType = 2 'Pessimistic Lock. objRS.Source = "Select * from myRange1" objRS.Open %> <br> <% Response.Write("Original Data") 'Printing out original spreadsheet headings and values. 'Note that the first recordset does not have a "value" property 'just a "name" property. This will spit out the column headings. Response.Write("<TABLE><TR>") For X = 0 To objRS.Fields.Count - 1 Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>") Next Response.Write("</TR>") objRS.MoveFirst While Not objRS.EOF Response.Write("<TR>") For X = 0 To objRS.Fields.Count - 1 Response.write("<TD>" & objRS.Fields.Item(X).Value) Next objRS.MoveNext Response.Write("</TR>") Wend Response.Write("</TABLE>") 'The update is made here objRS.MoveFirst objRS.Fields(0).Value = "change" objRS.Fields(1).Value = "look" objRS.Fields(2).Value = "30" objRS.Update 'Printing out spreadsheet headings and values after update. Response.Write("<br>Data after the update") Response.Write("<TABLE><TR>") For X = 0 To objRS.Fields.Count - 1 Response.Write("<TD>" & objRS.Fields.Item(X).Name & "</TD>") Next Response.Write("</TR>") objRS.MoveFirst While Not objRS.EOF Response.Write("<TR>") For X = 0 To objRS.Fields.Count - 1 Response.write("<TD>" & objRS.Fields.Item(X).Value) Next objRS.MoveNext Response.Write("</TR>") Wend Response.Write("</TABLE>") 'ADO Object clean up. objRS.Close Set objRS = Nothing objConn.Close Set objConn = Nothing %> <!-- End ASP Source Code -->
Guarde y asigne un nombre a la página de Active Server y su visualización en el explorador. Aparecerá lo siguiente:
Original Data: |column1|column2|column3| |------------|------------|------------| |rr|this|30| |bb|test|20| |tt|works|25| Data after the update: |column1|column2|column3| |------------|------------|------------| |change|look|30| |bb|test|20| |tt|works|25|
Nota:
Se realizó una actualización en la primera fila del rango con nombre (después de los encabezados).
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de