Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Plantilla de excel no guarda los datos

Hola amigos, tengo un form para hacer un presupuesto que tiene una grilla conectada a un ClientDataSet, como tabla temporal.

Luego un button "Imprimir" guarda los datos en la base de datos, pero a la vez toma un archivo base de excel, que es un archivo guardado en el directorio de la aplicacion con una plantilla (osea un formato previo) y yo sobreescribo las celdas correspondientes para que se complete la tabla de productos el cliente solicitado, etc.. y si se completan. Pero cuando salgo de excel y vuelvo a abrir el archivo de presupuesto (en el proceso hago una copia de la plantilla y la guardo en una carpeta presu) no se ven los datos, solo la plantilla.

La verdad no se que puede ser.

Codigo boton imprimir:

Código Delphi [-]
procedure TForm4.SpeedButton5Click(Sender: TObject);

var
Excel, Libro, Hojal: OleVariant;
Plantilla:string;
origen,s,destino,nombre,fechaf,fechai,fechac:string;
l,x:integer;
cantidad,preciououble;
idc,ide,ids,idprodu:Integer;
a:TServerMethods1Client;

begin
  a:=TServerMethods1Client.Create(ClientModule1.SQLConnection1.DBXConnection);
   if (Grillapresu.DataSource.DataSet.RecordCount>0) then
      begin

              if Form2.Edit1.Text<>'' then
                      idc:=ClientModule1.qscli.ParamByName('idcli').AsInteger
              else
              idc:=1;
               if cempleados.KeyValue=null then
                begin
                   ShowMessage('seleccione el empleado responsable.');
                end
               else
                begin
                   ide:=cempleados.KeyValue;
                 end;
               ids:=StrToInt(pre.ReadString('sucursal','id','1'));
               fechac:=FormatDateTime('yyyy/mm/dd',Now);
               fechai:=FormatDateTime('yyyy/mm/dd',Now);

               fechaf:=FormatDateTime('yyyy/mm/dd', IncDay(Now,15));

               a.nuevopresupuesto(idc,ide,ids,fechac,fechai,fechaf);
  l:=Grillapresu.DataSource.DataSet.RecordCount;




      with ClientModule1.cdspresu do

             begin
               First;
                while not Eof do
                    begin
                    cantidad:=ClientModule1.cdspresucantidad.AsFloat;
                    preciou:=ClientModule1.cdspresuprecio.AsFloat;
                    idprodu:=ClientModule1.cdspresuidproducto.AsInteger;
                    a.nuevodetallepresupuesto(idprodu,cantidad,preciou);

                    Next;
                    end;
               EmptyDataSet;
             end;

          // copiar plantilla
nombre:=FormatDateTime('yyyy-mm-dd,hh-mm-ss',Now) + 'presu.xlsx';
origen:=ExtractFilePath(Application.ExeName)+ 'presu.xlsx';
destino:=ExtractFilePath(Application.ExeName) +'pres\' + nombre;
CopyFile(Pchar(origen),Pchar(destino),True);
 //crear el objeto excel
Excel := CreateOleObject('Excel.Application');

  Plantilla:=destino;
  Excel.SheetsInNewWorkbook := 1;

  Libro := Excel.Workbooks.Open(Plantilla); // Plantilla es la ruta a un archivo excel que uso como plantilla
  Hojal := Libro.Worksheets[1];
  //posicionar datos
  Hojal.Cells[3,6] := '100';
  Hojal.Cells[4,4] := Edireccion.Text;
  Hojal.Cells[5,4] := Eciudad.Text;
  Hojal.Cells[6,4]:=Edit1.Text;
  if (Form2.Edit1.Text<>'') then
      begin
         Hojal.Cells[12,8]:=ClientModule1.qscli.ParamByName('idcli').AsInteger;
         Hojal.Cells[15,5]:=ClientModule1.qsclinombreyape.AsString;
      end;
  Hojal.Cells[10,8]:=Eemititdo.Text;
  Hojal.Cells[13,8]:='efectivo';
  Hojal.Cells[14,8]:=Evalido.Text;
  Excel.Visible := true;
   Hojal.SaveAs(nombre);

end
else
begin
ShowMessage('no hay productos');
end;

end;

En la primera parte guardo los datos en bd con el servidor DataSnap y en luego cargo la plantilla.
Responder Con Cita
  #2  
Antiguo 09-03-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Para salvar hay que utilizar

ExcelWorkbook1.SaveAs(ficheroGenerado,
-4143 , emptyParam , emptyParam, false, false,
1, emptyParam, false, emptyParam, emptyParam,
emptyParam, 0);


y no hoja1.saveas(nombre);

hay mucha información en la red al respecto para que puedas adaptar tu código.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #3  
Antiguo 10-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Para salvar hay que utilizar

ExcelWorkbook1.SaveAs(ficheroGenerado,
-4143 , emptyParam , emptyParam, false, false,
1, emptyParam, false, emptyParam, emptyParam,
emptyParam, 0);


y no hoja1.saveas(nombre);

hay mucha información en la red al respecto para que puedas adaptar tu código.

Saludos
Bueno encontre esto:

https://msdn.microsoft.com/es-es/lib...ok.saveas.aspx

Pero lo que no logro encontrar es el codigo de mi excel: es para excel 2010, donde esta el 52. El resto de los parametros son opcionales.
Código Delphi [-]
 Libro.SaveAs(nombre , 35 ,EmptyParam,EmptyParam,false,false,
                   EmptyParam,EmptyParam,EmptyParam,0);
Responder Con Cita
  #4  
Antiguo 10-03-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Poder: 22
fjcg02 Va camino a la fama
Este codigo me funciona con XP y excell 2010 y con W7 y excel 2010

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #5  
Antiguo 10-03-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
giulichajari,

Cita:
Empezado por giulichajari
...Plantilla de Excel no guarda los datos...lo que no logro encontrar es el código de mi Excel: es para Excel 2010...


Revisa esta información
Espero sea útil

Nelson.
Responder Con Cita
  #6  
Antiguo 10-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por fjcg02 Ver Mensaje
Este codigo me funciona con XP y excell 2010 y con W7 y excel 2010

Saludos
Me dice numero de parametros no valido.

Y Nelson en tu codigo
Código Delphi [-]
WrkS.SaveAs(FileExcel,xlOpenXMLWorkbook);

yo puse el nombre del libro:

Código Delphi [-]
Libro.SaveAs(nombre, xlOpenXLSXWorkbook);

Y dice Undeclared Identifier "xlOpenXLSXWorkbook";

Y he visto muchos ejemplos con el nombre del archivo nomas.
Responder Con Cita
  #7  
Antiguo 10-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Finalmente funciono con
Código Delphi [-]
Excel.Save

ja

Lo que si se ve la cabecera del presupuesto, ahora necesito recorrer el ClientDataSet para completar el detalle:

Código Delphi [-]
 with ClientModule1.cdspresu do
    begin
      x:=20;
      First;
      while not eof do
         begin

                Hojal.Cells[x,4]:=ClientModule1.cdspresucantidad.Value;
                Hojal.Cells[x,5]:=ClientModule1.cdspresunombre.Value;
                inc(x);

         end;

         Next;
    end;

Hice lo de arriba pero no funciona.. pero la cabecera si queda guardada. Muchas gracias
Responder Con Cita
  #8  
Antiguo 10-03-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
giulichajari,

Cita:
...Undeclared Identifier "xlOpenXLSXWorkbook"...



Te comento:

1- En el código propuesto en el Msg # 2 del hilo Hojas de Excel en Delphi, xlOpenXLSXWorkbook es una constante declarada con el valor 51.

2- Declara la constante como se indica en este fragmento de código:
Código Delphi [-]
const
   xlOpenXMLWorkbook = 51;
3- Revisa esta información:
Nota: 51 es el valor de Workbook por default.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 10-03-2015 a las 18:25:11.
Responder Con Cita
  #9  
Antiguo 11-03-2015
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Cita:
Empezado por nlsgarcia Ver Mensaje
giulichajari,




Te comento:

1- En el código propuesto en el Msg # 2 del hilo Hojas de Excel en Delphi, xlOpenXLSXWorkbook es una constante declarada con el valor 51.

2- Declara la constante como se indica en este fragmento de código:
Código Delphi [-]
const
   xlOpenXMLWorkbook = 51;
3- Revisa esta información:

Nota: 51 es el valor de Workbook por default.

Espero sea útil

Nelson.
Probe con

Código Delphi [-]
Hojal.SaveAs(nombre,xlOpenXMLWorkbook);

Hojal es de tipo:

Código Delphi [-]
Hojal := Libro.Worksheets[1];

que es del mismo tipo que en el ejemplo, no da errores pero no se guarda jja. Si encuentro la solucion la comento.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Guardar Datos en una plantilla de excel precargada Jorge Hernández .NET 4 24-05-2014 01:15:07
Exportar a plantilla excel-mxNativeExcel andresenlared Varios 0 09-07-2008 21:30:16
Exportar datos a una plantilla de excel Lizeth Impresión 3 08-09-2005 17:39:55
¿Plantilla Excel o como lo hago? RyAr Varios 2 27-07-2004 12:23:05
Abrir plantilla Excel y pasarle datos Jose Manuel Servers 2 01-06-2004 11:59:55


La franja horaria es GMT +2. Ahora son las 07:38:38.


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