Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Exportar FastReport a Excel (https://www.clubdelphi.com/foros/showthread.php?t=97500)

ArtPortEsp 03-06-2025 17:06:24

Exportar FastReport a Excel
 
Hola;

antes de decidir escribir este tema revise los posts anteriores para ver si alguno podia responder mis dudas pero no.

No uso FastReport regularmente (team ReportBuilder a morir); pero en este proyecto tengo que usarlo. :mad:

necesito exportar un reporte a Excel sin presentar un preview; con la ayuda de chatgpt llegue a este codigo:
Código:

  RepConciliacion.PrepareReport;
  //RepConciliacion.ShowReport;

  try
    SaveDialog1.Filter    := 'Archivos Excel (*.xlsx)|*.xlsx|Todos los archivos (*.*)|*.*';
    SaveDialog1.DefaultExt := 'xlsx';
    SaveDialog1.FileName  := 'Reporte_Conciliacion ('+EXTRACTFILENAME(CBRcuentasconciliadas.text)+').xlsx';
    SaveDialog1.Options    := [ofOverwritePrompt];

    if not SaveDialog1.Execute then Exit;  // Usuario canceló

    XLSXreport.FileName := SaveDialog1.FileName;
    XLSXreport.ShowDialog := False;
    XLSXreport.OpenAfterExport := True; // Opcional

    RepConciliacion.Export(XLSXreport);  // Exporta a Excel

    if FileExists(SaveDialog1.FileName) then
    begin
      Application.MessageBox(PChar('Archivo '+SaveDialog1.Filename+' generado!'), PChar('Mensaje del Sistema'),MB_OK+MB_ICONWARNING);
      Exit;
    end
    else
    begin
      Application.MessageBox(PChar('Fallo la generacion del archivo de la conciliacion!'), PChar('Mensaje del Sistema'),MB_OK+MB_ICONWARNING);
      Exit;
    end;
  finally

  end;

end;

Tengo el componente TfrxXLSXExport en la forma, pero al llegar a la linea: RepConciliacion.Export(XLSXreport); // Exporta a Excel me generar un error Access Violation
alguien sabe que estoy haciendo mal?

Saludos

Galahad 04-06-2025 08:25:38

Hola.
lo veo todo bien, de hecho, he replicado ese código en mi entorno y funciona bien.
A lo sumo , probaría a poner el preparereport más cerca del export y le pasaría el parámetro true (crearlastreport), es decir preparereport( true )

¿ que versión de fastreport utilizas ? ¿ tienes en el form visual ambos componentes (el del report y del xlsexport ?
aseguraté de tener en los uses la unidad: frxExportXLSX

saludos..

marco3k 04-06-2025 15:08:18

Hola ArtPortEsp, ya probaron tu código y funciona, entonces como dice Galahad, quizás sea la versión de Fastreport o quizás la versión de tu Excel. A modo de descartar, haz probado exportar al Excel desde la vista previa del reporte?. También hay 2 versiones de librerías para exportar frxExportXLS y frxExportXLSX prueba con una y la otra; creo que usaste frxExportXLSX, intenta usar frxExportXLS.

Efren2006 07-09-2025 21:14:39

Cita:

Empezado por ArtPortEsp (Mensaje 565149)
Hola;

antes de decidir escribir este tema revise los posts anteriores para ver si alguno podia responder mis dudas pero no.

No uso FastReport regularmente (team ReportBuilder a morir); pero en este proyecto tengo que usarlo. :mad:

necesito exportar un reporte a Excel sin presentar un preview; con la ayuda de chatgpt llegue a este codigo:
Código:

  RepConciliacion.PrepareReport;
  //RepConciliacion.ShowReport;

  try
    SaveDialog1.Filter    := 'Archivos Excel (*.xlsx)|*.xlsx|Todos los archivos (*.*)|*.*';
    SaveDialog1.DefaultExt := 'xlsx';
    SaveDialog1.FileName  := 'Reporte_Conciliacion ('+EXTRACTFILENAME(CBRcuentasconciliadas.text)+').xlsx';
    SaveDialog1.Options    := [ofOverwritePrompt];

    if not SaveDialog1.Execute then Exit;  // Usuario canceló

    XLSXreport.FileName := SaveDialog1.FileName;
    XLSXreport.ShowDialog := False;
    XLSXreport.OpenAfterExport := True; // Opcional

    RepConciliacion.Export(XLSXreport);  // Exporta a Excel

    if FileExists(SaveDialog1.FileName) then
    begin
      Application.MessageBox(PChar('Archivo '+SaveDialog1.Filename+' generado!'), PChar('Mensaje del Sistema'),MB_OK+MB_ICONWARNING);
      Exit;
    end
    else
    begin
      Application.MessageBox(PChar('Fallo la generacion del archivo de la conciliacion!'), PChar('Mensaje del Sistema'),MB_OK+MB_ICONWARNING);
      Exit;
    end;
  finally

  end;

end;

Tengo el componente TfrxXLSXExport en la forma, pero al llegar a la linea: RepConciliacion.Export(XLSXreport); // Exporta a Excel me generar un error Access Violation
alguien sabe que estoy haciendo mal?

Saludos

Buenas Tardes

Yo uso Fast Report de hace años en una aplicación que realice, y a veces he observado este error cuando el cliente no tiene actualizada la licencia de Office, ya que usa las librerías de Excel.

Lo dejo como TIP


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

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