Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Exportar a excel sin excel (https://www.clubdelphi.com/foros/showthread.php?t=66688)

mRoman 08-03-2010 05:05:10

Exportar a excel sin excel
 
Hola amigos....

De nuevo tratanto de encontrar como se exporta un QRY a excel usando una plantilla de por medio. Les explico el caso.

Tengo una plantilla con los formatos definidos asi como las formulas que se necesitan, generarlo no es problema en Windows y teniendo instalado el Excel, el problema es que ya cambiamos de plataforma de S.O. ahora estamos usando Linux Suse Enterprise...y pues ahi o tenemos Excel instalado.


He consultado lo siguiente:
http://www.clubdelphi.com/foros/showthread.php?t=703
http://www.clubdelphi.com/foros/arch...hp/t-4845.html
http://www.clubdelphi.com/foros/showthread.php?t=11950
http://www.clubdelphi.com/foros/showthread.php?t=6060
http://www.clubdelphi.com/foros/showthread.php?t=703
http://www.clubdelphi.com/foros/show...=qreport+excel
http://www.clubdelphi.com/foros/showthread.php?t=16467

Estas páginas las he consultado y en algunas hacen referencia a otra, pero no funciona el link.

En otras menciona algo de BIFF(creo q esto podría ser la solución) pero no logro como se podria usar y ni ejemaplos tampoco, les comento que tengo instalado los componentes de delphi.com.ar.

También tengo instalado los siguientes componentes:
XLSExport, pero me pide una archivo llamado CFILE.PAS, el cual lo busque en mi laptop y no lo encuentra.

FIRESOFT, pero no permiten el manejo de una plantilla.

MAX: Aqui me parece que no manejan plantillas, generan sí el archivo pero con un formato que no necesito como los de FireSoft o bien no sé del todo su utilización.

XLSREADWRITE : Este es de evaluación y sí realiza lo que necesito, pero solo es por algunos dias.

Han de perdonar que escriba sobre esto nuevamente, ya he creado hace algunos meses este mismo tema en otro hilo, pero obvio no obtuve respuesta satisfactoria, desde q me enteré que ibamos a cambiar a Linux, empece a investigar pero sin resultados satisfactorios.

Les comento que en el momento de crear el objeto, corriendo mi sistema en linux, me manda un error "Ole Error 80040...(no recuerdo lo demas)", supongo q lo manda porq no se tiene el excel.

Si alguien sabe como se puede resolver lo anterior se los agradezco.

Bueno les pongo algo del código q utilizo para generar el archivo de Excel mediante una plantilla sobre un S.O Windows teniendo instalado Excel:
Código Delphi [-]
procedure TfrmExportar.btnAplicarClick(Sender: TObject);
Var
   Excel, Libro: Variant;
   Lin,c,l,xDia,Bandera,nHoja,nMes,nMes2,nLec1, nLec2,nAnio, nTipoContr1, nTipoContr2 :Integer;
   cMes,cFichero:string;
   AA,MM,DD,dDia,dMes,dAnio:Word;
   dFecha1, dFecha2, dFecha3:TDateTime;
begin
   // OBTENEMOS LAS VENTAS DEL PERIODO POR TIPO DE PRODUCTO
//   XLS.lo
   qryVentasDiarias.Close;
   qryVentasDiarias.SQL.Clear;
   qryVentasDiarias.SQL.LoadFromFile('C:\SQLS\EXP_VENTAS.SQL');
   qryVentasDiarias.ParamByName('MES').AsInteger:=cbxMes.ItemIndex+1;
   qryVentasDiarias.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
   qryVentasDiarias.ParamByName('PRODUCT').AsString:=cbxProducto.KeyValue;
   qryVentasDiarias.Open;
   qryVentasDiarias.First;

   qryExportar.Close;
   qryExportar.SQL.Clear;
   qryExportar.SQL.LoadFromFile('c:\SQLS\EXP_ENCAB.SQL');
   qryExportar.ParamByName('MES').AsInteger:=cbxMes.ItemIndex+1;
   qryExportar.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
   qryExportar.ParamByName('PRODUCT').AsString:=cbxProducto.KeyValue;
   qryExportar.Open;
   qryExportar.First;
   if cbxProducto.KeyValue='TT-303-0001' then
   begin
       // CREA EL ARCHIVO DE EXCEL DE LA LECHE LIQUIDA SUBSIDIADA
       try
            Bar.Step:=1;
            Bar.Max:=qryVentasDiarias.RecordCount;
            Excel:=CreateOleObject('Excel.Application');
            Excel.Visible:=false;
            Excel.DisplayAlerts:=False;
            Excel.WorkBooks.Add('c:\SQLS\Plantillas\RPT_01.xlt');
            nHoja:=1;
            Libro:=Excel.WorkBooks[1].WorkSheets[nHoja];
            cMes:=cbxMes.Items[cbxMes.itemindex];
            // LLENAR EL ENCABEZADO DEL ARCHIVO DE EXCEL Y DATOS GLOBALES
            Libro.Cells[3,2]:='Comportamiento de las ventas / Solicitud de leche del mes de '+cMes+'-'+mskAnio.Text+'.';
            Libro.Cells[5,2]:='Dias de Venta:';

Creo q el problema esta en "Excel:=CreateOleObject('Excel.Application');".

Si me pueden ayudar con algo de código, para generar una archivo de Excel usando una plantilla que tenga las mismas caracteristicas de mi código, es decir, que pueda registrar información celda por celda, sin tener instalado el Excel....

Gracias por su tiempo y dedicación muchachos....SALUDOS !

duilioisola 08-03-2010 17:15:56

No es solución, pero...

Podrías tratar de hacer esto con OpenOffice y luego grabarlo como .XLS
En la sección de trucos recuerdo que hay algo.

Mira esto.

mRoman 09-03-2010 06:09:22

Gracias....Duiloisola, el código me parece mas q interesante, de hecho me parece un poco complicado de entender, lo he leido y talvez existe código que se puede evitar ya que no tendria caso para lo que necesito....

Lo estudiare mas a fondo y espero resolverlo pronto, para luego pasarles la solución....

De momento muchas gracias por tu orientación y por tu tiempo. Espero encontrar otras soluciones aportadas por los demas foreros.

Saludos

rrf 13-03-2010 19:26:56

Hola.

Acabo de poner un comentario en otro hilo del foro en el que comento de que se puede exportar a Excel con unos pocos procedimientos (no se necesitan componentes, ni tener Excel instalado).

Viene de un truco bastante viejo (de 1999), pero lo probé hoy con OpenOffice y leyó correctamente la hoja de cálculo.

El hilo está en esta dirección y contiene un ejemplo. El ejemplo se entiende fácilmente y es muy sencillo de adaptar.

Además, con un bucle for-next, simulé exportar datos de un dataset desde el primer registro y recorriendo la tabla registro por registro y exportando en cada línea los datos del registro activo en ese momento y salió bien. (esto no se incluye en el ejemplo del enlace anterior)

Espero que te sea útil.

Ramón.

mRoman 15-03-2010 20:05:53

Que tal Ramon:

Agradezco tu ayuda y creeme que no sabes cuanto valoro el tiempo que has invertido en favor de todos nosotros los que necesitamos resolver estos tipo de problema.

Ya lo revisé y me parece excelente el aporte, este codigo genera un archivo XLS pero no sé si se puede a partir de una plantilla?, ya que este es mi caso.

Estuve revisando la instruccion TFileStream para ver si en sus propiedades encontraba como abrir o asignar la plantilla que te comento, y a partir de esta generar el archivo con otro nombre.

Esta plantilla contiene el formato que necesito para vaciar los datos en el. De igual manera he consultado y probado otros componentes que si me sirven, de hecho el ultimo me hizo pensar que ya lo habia resuelto, ya que desinstale el MS Office para probar, solo que este funciona siempre y cuando este abierto el IDE de Delphi....solamente asi funciona ese componente ya que es de paga.

Bueno abusando de tu generosidad Ramon, me gustaria saber si sabes como generar el archivo XLS en base a una plantilla con tu código que amablemente me has compartido.

Nuevamente agradezco tu ayuda y tu tiempo...estamos en contacto.

Saludos

rrf 30-03-2010 15:11:25

Hola de nuevo.
Lamento haber tardado tanto en contestar, pero mi correo electrónico consideró el mensaje de aviso (de que el tema había sido contestado) como espam y lo acabo de descubrir y leer ahora mismo.
MRoman, te aclaro que el código no es mío. Solo lo adapté, pero el código original lo obtuve de un enlace de descarga de Embarcadero.
Y siento decirte que no te puedo ayudar en lo que me pides, porque no sé como hacerlo.
Sin embargo, creo que hay un miembro del foro que sí que domina ese tipo de situaciones, pues ha hecho un/os componente/s que exportan a excel, su nombre en el foro es delphi.com.ar y puedes leer un enlace con un tema muy parecido a este en este enlace .
Quizás, si te pones en contacto con él, te pueda ayudar u orientar hacia como obtener una solución a lo que buscas.
Saludos.
Ramón
P.D. : Acabo de leer tu primer mensaje de este hilo y me he dado cuenta de que ya conoces los componentes de delphi.com.ar ...

mRoman 31-03-2010 07:37:17

Ya encontre la solucion....
 
Antes que nada gracias por contestar, los componentes de delphi.com.ar, ya los tengo, pero segui investigando haber si habia otras opciones y la localice.

La solución que encontre la obtuve de la siguiente dirección:

http://ineedfile.com/download/112185...phi-6-2009-zip

Es un componente que te lee una plantilla de Excel y lo puedes grabar con otro nombre, este archivo (ZIP) contiene carpetas con ejemplos con codigo fuente y toda la cosa....en estos momentos lo estoy probando. Este componente no necesita tener Office instalado....y los archivos generados los puedes leer en OpenOffice sin problema, ya generado no hay bronca.

Gracias a todos los que consultaron este hilo mas los que trataron de dar una solución, a todos ustedes gracias por su apoyo. Estoy seguro que este hilo ayudara a otros mas....

Saludos.!


La franja horaria es GMT +2. Ahora son las 20:56:27.

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