Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2022
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 62
Poder: 10
marco3k Va por buen camino
Solucion a Excel lento

Mira en la parte final de este post respondi esa pregunta, espero te sirva:


https://www.clubdelphi.com/foros/showthread.php?t=94464
Responder Con Cita
  #2  
Antiguo 25-03-2022
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Componentes de FireSoft

Hola Novato_Erick

En esta página https://torry.net/authorsmore.php?id=6057 podras bajar unos componentes que te puedan ayudar (Autor:Federico Firenze). FireSoft ExportSuite V.1, son Free.

Talvez te ayuden a ser mas rápido la exportación.

Saludos.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #3  
Antiguo 26-03-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Mira en la parte final de este post respondi esa pregunta, espero te sirva:


https://www.clubdelphi.com/foros/showthread.php?t=94464

Tenias razón marcos utilizando el Componente ADO la exportación fue en dos pestañazos .

Esto fué lo que implementé Gracias a ustedes:
Código Delphi [-]
procedure EmiteInformeVentas2(FechaVentasI, FechaVentasF: TDate); // Ver2
var
  I, fila: Integer;
  ExcelApp, ExcelLibro, ExcelHoja: OleVariant;
  RutaExcel, FechaInfo: String;
begin
  with dmReportes.qInformeVentaNombreClientes do
  begin
    ParamByName('FECHAINI').AsDate := FechaVentasI;
    ParamByName('FECHAFIN').AsDate := FechaVentasF;
    ExecSQL;
  end;
  if dmReportes.cdsInformeVentaNombreCliente.Active = True then
  begin
    dmReportes.cdsInformeVentaNombreCliente.EmptyDataSet;
    dmReportes.cdsInformeVentaNombreCliente.Active := False;
  end;
  dmReportes.cdsInformeVentaNombreCliente.Active := True;
  TotalRegistroData := dmReportes.cdsInformeVentaNombreCliente.RecordCount;
  dmReportes.ADODataSetInforme.FieldDefs.Assign
    (dmReportes.cdsInformeVentaNombreCliente.FieldDefs);
  dmReportes.ADODataSetInforme.CreateDataSet;
  try
    dmReportes.cdsInformeVentaNombreCliente.DisableControls;
    // dmReportes.ADODataSetInforme.Active := True;
    dmReportes.ADODataSetInforme.DisableControls;
    dmReportes.cdsInformeVentaNombreCliente.First;
    while not dmReportes.cdsInformeVentaNombreCliente.Eof do
    begin
      dmReportes.ADODataSetInforme.Insert;
      for I := 0 to dmReportes.cdsInformeVentaNombreCliente.FieldCount - 1 do
      begin
        dmReportes.ADODataSetInforme.Fields[i].Value :=
          dmReportes.cdsInformeVentaNombreCliente.Fields[i].Value;
        // dmReportes.ADODataSetInforme.Post;
      end;
      dmReportes.cdsInformeVentaNombreCliente.Next;
    end;
    FechaInfo := StringReplace(DateToStr(Now), '/', '', [rfReplaceAll]);
    RutaExcel := ExtractFilePath(Application.ExeName) + 'Informe' + FechaInfo;
    // dmReportes.ADODataSetInforme.SaveToFile(RutaExcel + '.xls');
  finally
    dmReportes.ADODataSetInforme.EnableControls;
    dmReportes.cdsInformeVentaNombreCliente.EnableControls;
  end;
    // Crea el objeto Excel, el objeto workBook y el objeto sheet
    ExcelApp := CreateOleObject('Excel.Application');
  try
    ExcelLibro := ExcelApp.Workbooks.Add();
    // Añadimos una Hoja
    ExcelHoja := ExcelLibro.Worksheets.Add();
    // aca puedes recorrer los encabezados y otras cosas que desees No he logrado poner los encabezado 
    ExcelHoja.Range['A2'].CopyFromRecordset
      (dmReportes.ADODataSetInforme.Recordset);  // .CopyFromRecordset(Rs.Recordset);
    // esta es el método importante del Excel y como parametro tiene un objeto ADO
    // y por eso la necesidad de usar este objeto.
    MessageDLG('¡Se exportó correctamente!', mtInformation, [mbOk], 0);
    ExcelApp.Visible := True;
  except
    ExcelApp.Quit;
    dmReportes.ADODataSetInforme.EnableControls;
    Showmessage('No se pudo crear el Archivo Excel.');
    raise;
  end;
end;

como coloque en el comentario: "No he logrado poner los encabezado" de la tabla

igual está funcional mejoraré y al términar pondré el código final.

Saludos;

novato_erick
Responder Con Cita
  #4  
Antiguo 26-03-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Se me olvido poner que en mi ADODataSetInforme le puse en la propiedad ConnectionString: Provider=Microsoft.Jet.OLEDB.4.0; Mode=ReadWrite;Extended Properties=Excel 8.0;Persist Security Info=False

Saludos;

novato_erick
Responder Con Cita
  #5  
Antiguo 28-03-2022
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 62
Poder: 10
marco3k Va por buen camino
Cita:
Empezado por novato_erick Ver Mensaje
Tenias razón marcos utilizando el Componente ADO la exportación fue en dos pestañazos .

Esto fué lo que implementé Gracias a ustedes:
Código Delphi [-]procedure EmiteInformeVentas2(FechaVentasI, FechaVentasF: TDate); // Ver2 var I, fila: Integer; ExcelApp, ExcelLibro, ExcelHoja: OleVariant; RutaExcel, FechaInfo: String; begin with dmReportes.qInformeVentaNombreClientes do begin ParamByName('FECHAINI').AsDate := FechaVentasI; ParamByName('FECHAFIN').AsDate := FechaVentasF; ExecSQL; end; if dmReportes.cdsInformeVentaNombreCliente.Active = True then begin dmReportes.cdsInformeVentaNombreCliente.EmptyDataSet; dmReportes.cdsInformeVentaNombreCliente.Active := False; end; dmReportes.cdsInformeVentaNombreCliente.Active := True; TotalRegistroData := dmReportes.cdsInformeVentaNombreCliente.RecordCount; dmReportes.ADODataSetInforme.FieldDefs.Assign (dmReportes.cdsInformeVentaNombreCliente.FieldDefs); dmReportes.ADODataSetInforme.CreateDataSet; try dmReportes.cdsInformeVentaNombreCliente.DisableControls; // dmReportes.ADODataSetInforme.Active := True; dmReportes.ADODataSetInforme.DisableControls; dmReportes.cdsInformeVentaNombreCliente.First; while not dmReportes.cdsInformeVentaNombreCliente.Eof do begin dmReportes.ADODataSetInforme.Insert; for I := 0 to dmReportes.cdsInformeVentaNombreCliente.FieldCount - 1 do begin dmReportes.ADODataSetInforme.Fields[i].Value := dmReportes.cdsInformeVentaNombreCliente.Fields[i].Value; // dmReportes.ADODataSetInforme.Post; end; dmReportes.cdsInformeVentaNombreCliente.Next; end; FechaInfo := StringReplace(DateToStr(Now), '/', '', [rfReplaceAll]); RutaExcel := ExtractFilePath(Application.ExeName) + 'Informe' + FechaInfo; // dmReportes.ADODataSetInforme.SaveToFile(RutaExcel + '.xls'); finally dmReportes.ADODataSetInforme.EnableControls; dmReportes.cdsInformeVentaNombreCliente.EnableControls; end; // Crea el objeto Excel, el objeto workBook y el objeto sheet ExcelApp := CreateOleObject('Excel.Application'); try ExcelLibro := ExcelApp.Workbooks.Add(); // Añadimos una Hoja ExcelHoja := ExcelLibro.Worksheets.Add(); // aca puedes recorrer los encabezados y otras cosas que desees No he logrado poner los encabezado ExcelHoja.Range['A2'].CopyFromRecordset (dmReportes.ADODataSetInforme.Recordset); // .CopyFromRecordset(Rs.Recordset); // esta es el método importante del Excel y como parametro tiene un objeto ADO // y por eso la necesidad de usar este objeto. MessageDLG('¡Se exportó correctamente!', mtInformation, [mbOk], 0); ExcelApp.Visible := True; except ExcelApp.Quit; dmReportes.ADODataSetInforme.EnableControls; Showmessage('No se pudo crear el Archivo Excel.'); raise; end; end;


como coloque en el comentario: "No he logrado poner los encabezado" de la tabla

igual está funcional mejoraré y al términar pondré el código final.

Saludos;

novato_erick

Agregar encabezados en sencillo, por ejemplo agrega esto mas o menos así:

Código Delphi [-]
var o_Excel,o_Libro, o_Hoja : OleVariant; 
begin
    o_Excel := CreateOleObject('Excel.Application');    
    o_Libro := o_Excel.Workbooks.Add;    
    o_hoja := o_Libro.Worksheets.Add;   
    o_hoja.range['A1']:='Código';    
    o_hoja.range['B1']:='Nombre';    
    o_hoja.range['C1']:='Fecha';    
    o_hoja.range['D1']:='Valor';    
    o_hoja.range['E1']:='Estado';
    ...
end;
Responder Con Cita
  #6  
Antiguo 29-03-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Cita:
Empezado por marco3k Ver Mensaje
Agregar encabezados en sencillo, por ejemplo agrega esto mas o menos así:

Código Delphi [-]
var o_Excel,o_Libro, o_Hoja : OleVariant; 
begin
    o_Excel := CreateOleObject('Excel.Application');    
    o_Libro := o_Excel.Workbooks.Add;    
    o_hoja := o_Libro.Worksheets.Add;   
    o_hoja.range['A1']:='Código';    
    o_hoja.range['B1']:='Nombre';    
    o_hoja.range['C1']:='Fecha';    
    o_hoja.range['D1']:='Valor';    
    o_hoja.range['E1']:='Estado';
    ...
end;

Ohhh gracias... Quedo de anillo al dedo.

Saludos y Bendiciones por su ayuda.

novato_erick
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
Error con exportacion a Excel jafera Servers 2 28-08-2014 11:53:15
Personalizar exportacion a excel ilichhernandez Conexión con bases de datos 12 08-06-2011 20:52:59
QReport Exportación a PDF, Excel, TXT, ETC pmtzg Impresión 1 11-05-2010 00:10:50
exportacion de access a excel luxus Conexión con bases de datos 3 15-04-2008 20:30:59
Exportacion a Excel incorrecta jfloro Servers 4 19-09-2003 08:48:36


La franja horaria es GMT +2. Ahora son las 19:26:03.


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