Hola,
Desde hace tiempo, cuando requiero conectar Delphi con Excel via ADO uso lo que describí en
este hilo y cuyos pasos resumo aquí:
- Agregar los componentes ADO a la paleta de componentes
- Agregar un componente TAdoConnection y poner su propiedad LoginPrompt en false.
- Hacer doble clic en el componente para que se abra el editor de la propiedad ConnectionString, seleccionar "Use connection string" y oprimir el botón "Build" para que se abra la ventana de vínculo de datos.
- En la ficha "Proveedor" seleccionar Microsoft Jet 4.0 OLE DB.
- En la ficha "Conexión", en el cuadro "Origen de datos" escribir el nombre del archivo excel.
- En la ficha "Todas" seleccionar "Extended Properties" y luego "Modificar valor" y escribir "Excel 8.0" (sin las comillas).
- Oprimir 'Ok' las veces necesarias para cerrar todas las ventanas.
Con esto, ya se puede conectar un ADOTable y seleccionar la hoja que deseemos del libro de excel en su propiedad TableName.
Ahora bien, este método funciona para varias versiones de Excel, pero no, aparentemente, para Excel 2007. Básicamente hay que cambiar el proveedor (paso 4) por
Provider=Microsoft.ACE.OLEDB.12.0.
Pero hay un pequeño problema. Al menos con Delphi 7, al seleccionar este proveedor, la propiedad "Extended Properties" no se guarda correctamente en el "Connection String", pero puede asignarse directamente en código:
Código Delphi
[-]
ADOConnection.ConnectionString :=
'Provider=Microsoft.ACE.OLEDB.12.0;' +
'Data Source=C:\ruta\al\archivo.xlsx;' +
'Extended Properties="Excel 12.0"';
y funciona bien.
// Saludos