Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Abrir hoja/libro excel

Buenos días a todos. Necesitaba, con una aplicación en BCB 6, abrir un libro excel que contiene varias hojas diferentes. He estado viendo hilos por los foros y el que más información me ha dado es Excel a DBGrid. Me he bajado los ejemplos que cita Neftalí.

Tengo puesto este código para conectarme al libro:
Código:
try
{
     ADOConnection1->Close();
     ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + OpenDialog->FileName + ";Extended Properties=Excel 8.0;Persist Security Info=False";
     ADOConnection1->Open();
}
catch(Exception &Exc)
{
     return;
}
Pero al ejecutar el open me da este error:

El libro está cerrado al ejecutar el open y no está protegido con ninguna contraseña. En uno de los ejemplos que cita Neftalí (ADO_Excel_2) veo que define dos constantes:
Cita:
CONN_1 = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\Data.xls;' +
' Mode=Share Deny None;Extended Properties="Excel 8.0;HDR=Yes;';
CONN_2 = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=.\Datos.xls;' +
' Mode=Share Deny None;Extended Properties="Excel 8.0;HDR=Yes;';
imagino que esas constantes lo que hacen es evitar ese error que me aparece, pero no veo como se usan luego las mismas.

Por otra parte me surge una duda: como he comentado el libro tiene varias hojas, ¿cómo hago para ir moviéndome a lo largo de ellas? El elemento ADOTable ¿interpreta cada una de las hojas como una tabla distinta?
Responder Con Cita
  #2  
Antiguo 19-07-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
El mensaje de error dice: "... no puede abrir el archivo ''. ..."
Por el hecho de que después de la palabra "archivo" hay dos comilla simples, revisa estos dos comentarios que hago:
  • Asegúrate de que el nombre del archivo no está en blanco.
  • Además, el nombre del archivo puede tener que ir entre comillas (quizás dobles, quizás simples).

En Delphi OpenDialog se utiliza en varios pasos:

Código Delphi [-]
// Inicializo el fichero por defecto a utilizar
OpenDialog.FileName  := ''

// Execute devuelve True si aceptó el fichero seleccionado o False si canceló la selección
if OpenDialog.Execute then
begin
   // Si seleccionó un fichero obtengo el nombre para tratarlo
   FicheroExcel := OpenDialog.FileName;

   [...]
try
{
     ADOConnection1->Close();
     ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + OpenDialog->FileName + ";Extended Properties=Excel 8.0;Persist Security Info=False";
     ADOConnection1->Open();
}
catch(Exception &Exc)
{
     return;
}
   [...]
end;

Última edición por duilioisola fecha: 19-07-2023 a las 12:23:53.
Responder Con Cita
  #3  
Antiguo 19-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por la respuesta. He puesto sólo el código del TADOConnection; evidentemente estoy seguro que el nombre del fichero no está vacío, y para evitar problemas he simplificado el nombre del fichero a RESULTADOS.XLS, eliminando espacios en blanco y demás.

Por otra parte he cogido el código que comentaba antes del ejemplo y he puesto así la conexión:
Código:
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + OpenDialog->FileName + ";Extended Properties=Excel 8.0;Persist Security Info=False;HDR=Yes;";
Intuyo que ese útimo trozo (HDR=Yes) es para indicar que la hoja tiene cabceras. Ahora me da otro error distinto:
Responder Con Cita
  #4  
Antiguo 19-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Angel.Matilla Ver Mensaje
Necesitaba, con una aplicación en BCB 6, abrir un libro excel que contiene varias hojas diferentes. He estado viendo hilos por los foros y el que más información me ha dado es Excel a DBGrid. Me he bajado los ejemplos que cita Neftalí.
...
Pero al ejecutar el open me da este error:
...
El libro está cerrado al ejecutar el open y no está protegido con ninguna contraseña. En uno de los ejemplos que cita Neftalí (ADO_Excel_2) veo que define dos constantes:

imagino que esas constantes lo que hacen es evitar ese error que me aparece, pero no veo como se usan luego las mismas.
¿Es posible que el libro de Excel sea un formato nuevo?
Fíjate que ahí está usando Jet 4.0 y Excel 8.0. Si el libro está en un formato más nuevo puede ser que de error.

Prueba a abrir con esa línea un Excel grabado en una versión antigua.

Cita:
Empezado por Angel.Matilla Ver Mensaje
Por otra parte me surge una duda: como he comentado el libro tiene varias hojas, ¿cómo hago para ir moviéndome a lo largo de ellas? El elemento ADOTable ¿interpreta cada una de las hojas como una tabla distinta?
Correcto.
El libro es el equivalente a una Base de Datos y cada una de las hojas es el equivalente a una tabla.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 19-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Angel.Matilla Ver Mensaje
Ahora me da otro error distinto:
Si quieres adjunta la hoja de Excel, con unos datos de ejemplo y probamos...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 19-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Si quieres adjunta la hoja de Excel, con unos datos de ejemplo y probamos...
Ahora mismo no tengo el PC a mano. Mañana por la mañana subo el libro.
Responder Con Cita
  #7  
Antiguo 19-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
¿Es posible que el libro de Excel sea un formato nuevo?
Fíjate que ahí está usando Jet 4.0 y Excel 8.0. Si el libro está en un formato más nuevo puede ser que de error.

Prueba a abrir con esa línea un Excel grabado en una versión antigua.
Yo lo abro con Office 2007, pero es posible.
Responder Con Cita
  #8  
Antiguo 20-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Os adjunto dos ficheros. RESULTADOS.RAR contiene el fichero tal como me lo ha enviado el cliente; en RESULTADOS1.RAR hay una copia guardada en formato Excel 97-2003, por si hubiera alguna diferencia. Mientras seguiré haciendo pruebas a ver que puede pasar. Gracias de antemano.
Archivos Adjuntos
Tipo de Archivo: rar RESULTADOS.rar (47,8 KB, 3 visitas)
Tipo de Archivo: rar RESULTADOS1.rar (48,2 KB, 3 visitas)
Responder Con Cita
  #9  
Antiguo 31-07-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Bueno, gracias a otro hilo (Llevar desde Excel a una BD paradox) he podido hacer que se conecte al libro Excel. El código queda así:
Código:
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=admin;"
"Data Source=" + fMenu->OpenDialog->FileName + ";Mode=ReadWrite;"
"Extended Properties=Excel 8.0;Jet OLEDB:System database="";"
"Jet OLEDB:Registry Path=;Jet OLEDB:Database Password=;"
"Jet OLEDB:Engine Type=35;Jet OLEDB:Database LockingMode=0;"
"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;"
"Jet OLEDB:New Database Password="";Jet OLEDB: Create System Database=False;"
"Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;"
"Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
Ahora tengo otro problema: Cómo saber cuantas hojas tiene el libro. No he visto como averiguar ese dato.
Responder Con Cita
  #10  
Antiguo 31-07-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Angel.Matilla Ver Mensaje
Ahora tengo otro problema: Cómo saber cuantas hojas tiene el libro. No he visto como averiguar ese dato.

Basta con que abras la conexión (ADOConnection) y utilices el método GetTableNames.
Te devolverá la lista de tablas; En este caso la lista de Hojas del libro de Excel.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 01-08-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Muchísimas gracias.
Responder Con Cita
  #12  
Antiguo 01-08-2023
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Por otra parte he descubierto la razón del mensaje de error que ponía en la imagen de mi primer mensaje:

Antes de hacer el proceso de conexión del ADOConnection hay que crear el objeto; es decir que hay que añadir esta línea:
Código:
Variant Excel = CreateOleObject("Excel.Application");
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Abrir una hoja de Excel y poder cargarla en una app Android en Delphi XE6. H.Sagas96 Desarrollo en Delphi para Android 1 19-06-2015 09:58:06
Abrir libro de Excel con delphi 7? CaosDeath Servers 2 28-05-2010 11:26:19
Abrir doc excel en una hoja específica Gaya Servers 2 13-10-2008 23:29:50
Problemas con Libro de Excel lgarcia Servers 2 15-12-2006 22:06:15
Abrir Hoja de Excel en Forma???? m@kio Servers 2 12-10-2005 20:26:33


La franja horaria es GMT +2. Ahora son las 01:10:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi