PDA

Ver la Versión Completa : Delphi con Excel


heloinho
12-11-2007, 15:44:34
Hola buenas!!!! Me presento, me llamo Helios y acabo de comenzar a trabajar en una empresa (soy el único informaitco) y me piden que comience a familiarizarme con el Delphi. Todo fue bién (la primera impresión fue buena :P) hasta que me topé con el Excel...
Primero decir que si no está el post en el sitio adecuado que algun amable moderador lo cambie de sitio.
"Poseso", mi problema es que tengo que hacer comparaciones entre diferentes campos de diferentes hojas de calculo de excel (la salida del Facturaplus es un xls) y no se como pillarlo. He visto multitud de información de Delphi relacionandose con BD's pero no sé como hacerlo con excel.
Mi objetivo sería el siguiente: comparar determinadas columnas de diferentes archivos xls y a partir de alli generar otro xls de salida. Se puede hacer? Tengo que usar directivas de SQL o puedo hacerlo con leguaje "normal". Que la salida sea otro xls no es imprescindible... almenos que se vea en el notepad :P
Mis conocimientos de SQL son limitaditos (lo que hecho en la carrera) aunque de lenguajes como C y C++ ando bastante bien.
Gracias a todos por adelantado y me parece que nos veremos bastante a menudo por aquí.... :P

Neftali [Germán.Estévez]
12-11-2007, 16:01:04
Hola HElios, bienvenido al foro.
Bueno, así a primeras y para que puedas empezar a revisar cosas, se me ocurren dos formas de interactuar con Excel.
(1) Si los datos que tienes que revisar del Libro/Hoja tienen estructura de Base de Datos, es decir, que van por filas y columnas, puedes conectar a esa hoja de excel como si fuera una tabla, y leer los datos como si de una tabla se tratara.


(2) Si por el contrario los datos que hay en esa hoja, no siguen esa estructura, son más heterogéneos o simplemente no quieres seguir el primer método, puedes usar automatización.
Con eso podrás acceder a la hoja de Excel y revisar las hojas y las celdas; Eso te da más libertad que el primer método, pero también es más trabajoso.

Este es un buen link (http://delphi.about.com/od/database/l/aa090903a.htm), para revisar ambas opciones.
También puedes leer sobre automatización aquí (http://www.djpate.freeserve.co.uk/AutoExcl.htm)y aquí (http://dn.codegear.com/article/10126).

Aunque si buscas en los foros y en Google (en ese orden ;)) seguro que encuentras más.

Un saludo.

heloinho
13-11-2007, 08:43:00
Eii!Gracias por la respuesta, pero no se porque... no me quedan claras algunas cosas... a ver si me puedes echar una manita...
Mis datos estan ordenados, osease, primera columna es algo, la segunda es otra cosa y todos los campos están llenos.
Tu primera opcion me gusta. Lo único que no se como hacerlo (soy muy novato en esto... llevo 2 dias con él). Si lo paso a una tabla después puedo usar SQL no? Pero no se como hacerlo.
La segunda también esta bien, porque podría tratar el programa como un codigo de c que es lo que domino más.
A ver si m puedes decir como pasarlo a una tabla. Merci!!! (me pongo a trabajar en ello :P)

Neftali [Germán.Estévez]
13-11-2007, 12:00:28
Al FTP del Club, en la sección de ejemplos he subido uno titulado "Ejemplo_Conectar_ADO_Excel.zip"; Revisa sobre todo la cadena de conexión de ADO. Esa es la clave para conectar a una hoja de Excel como si fuera una tabla.

heloinho
13-11-2007, 13:16:08
Buenas!!!! Despues de un buen rato trampenado y consiguiendome instalar el Delphi 7 en MI ordenador (una kk) al ponerme manos a la obra con lo que explica en la web http://dn.codegear.com/article/10127#creating_objs (que esta muy bien explicado) me dice que adjunte dos ficheros al proyecto. Segun él estos ficheros (COMObj.pas y COMObj.inc) estan en el directorio tatatatata (.../Delphi/Source/Rtl/Sys). Según mi experiencia no están ahi. Igualmente los he conseguido (uno estaba por otro lao y el .inc m lo he bajado) pero me sigue sin funcionar. Ni me compila!!! me da un error en la cosa mas tonta, y como yo soy bastante cortito con esto del Delphi no tngo ni idea de donde viene. El error (el primero) sale en la linea V := CreateOleObject('Excel.Application'); y dice lo siguiente Undeclared Identifier CreateOleObject ... vamos que no lo he definido segun don compilador.
Espero que me podais decir la chorrada de que es. Gracias!!!! Nos vemos por aqui despues :P

Edito: Voy a ver eso del FTP que lo has puesto mientras lo escribia y hacia otras cosas.

Neftali [Germán.Estévez]
13-11-2007, 13:31:40
Añade ComObj al uses.

heloinho
13-11-2007, 16:45:24
El tema es que compila y se ejecuta y carga los datos de la xls. Ok, hasta aqui todo bien (ademas también sé quitar y poner la tabla :cool:). El problema viene cuando lo cierras, que parece todo normal pero no se cierra bien y no te deja ni volverlo a crear ni borrarlo ni quitar el proceso desde el administrador de tareas!!!!!! Estoy ya sospechando de mi ordenador, de mi Delphi (uso el 7 version enterprise bajada de mininova) y hasta de mi mismo (sere tonto?:eek:).

Una vez que sepa cerrarlo bien y arreglando un poco eso, con unas consultas sql supongo que estara ferpecto.

Un par (mas) de preguntas...
1)Que delphi me recomendais? (recordar que tengo el Borland Delphi 7 Enterprise). Me lo deberia cambiar?
2)Cuando dices mete en el uses ComObj... que pongo a continuacion de lo que haya? osease ...
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, ComObj;

asi no?

Gracias por tu ayuda y cuando me expliques nada no des nada por sabido!!!No t ahorres una frase pensando... este tio lo sabrá esto !!!

Adios!!!!

richi
14-11-2007, 11:12:43
Era para aprovechar que esta abierto el tema y preguntar como se pueden hacer consultas. Yo lo que tengo es el AdoConnection y AdoDataSet para conectarme con el excel y andar por el.
El problema es que necesito sacar solo ciertas filas del excel de cada vez y para eso necesito hacer consultas, añadí el componente ADOQuery y al poner la consulta y intentar conectarme da el siguiente error: "ERROR DE SINTAXIS EN LA CLAUSULA FROM".
¿Se pueden hacer consultas?. ¿Como seria la forma de hacerlas?.
Gracias a todos.

Neftali [Germán.Estévez]
14-11-2007, 11:47:32
La nomenclatura de las SQL cuando estás accediendo a Excel es un poco "compleja" (en cuanto al nombre de las hojas de Excel). Te recomiendo leer detenidamente este artículo (http://delphi.about.com/od/database/l/aa090903a.htm) de Delphi About; Ahí verás algunos ejemplos de nomenclatura y además al final del artículo puedes descargar el código de los ejemplos.

richi
14-11-2007, 12:24:49
Gracias Neftali por la respuesta que me ayudo a soluccionarlo. La solucción es la siguiente:

SELECT *
FROM [HOJA1$]
WHERE ...