Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Exportando a Excel desde Quickreport 5 (https://www.clubdelphi.com/foros/showthread.php?t=74468)

AlbertoG 21-06-2011 20:30:05

Exportando a Excel desde Quickreport 5
 
Hola a todos y gracias por sus respuestas

Uso D7 y QuickReport 5, el cual tiene un componente qrexcelfilter que me exporta mis reportes a excel y hasta ahí todo ok, el problema es que los reportes exportados luego aparecen todos descuadrados en excel y no como los tengo previamente mostrados en los reportes quick report, he buscado durante semanas sobre todos los comentarios al respecto pero no veo que alguien haya tratado el tema.

Me pregunto como haría entre otras cosas, para indicar en el reporte exportado el ancho de las columnas por ejemplo, el componente trExcelFilter no trae ninguna propiedad personalizable y quisiera saber si alguien ha tenido experiencia con eso como hacerlo a través de código, como se llama al componente y se le indican los parametros de ancho de columna, o que no incluya columnas vacías entre los datos como lo está haciendo actualmente, lo cual no sucede con el preview del quick report.

Muchas gracias.
AlbertoG

oscarac 21-06-2011 20:59:07

pues me pasaba lo mismo y opte por hacer mi propia rutina de migracion basandose en algun query activo

algo asi
Código Delphi [-]
 
Procedure TfrmReporteConsumo.ExportarToExcel(fName: string);
const
  xlWBATworksheet = -4167;
var  // definicion de variables
  Excel, WorkBook, WorkSheet: OleVariant;
begin
  _FilaTitulos := 6;
  Excel := CreateOleObject('Excel.Application');
  Excel.DisplayAlerts := False;
  WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);
  WorkSheet := WorkBook.WorkSheets[1];
  WorkSheet.Name := 'Hoja1';
  WorkSheet.Cells[1,1].font.Bold := True;
  WorkSheet.Cells[1,1] := 'Nombre de la empresa';
  WorkSheet.Cells[3,1] := 'Reporte Consolidado de Consumos (Facturacion)';
  WorkSheet.Cells[4,1] :=  'Periodo : '  + FormatDateTime ('dd/mm/yyyy', dtFechaIni.date) + ' Al ' + FormatDateTime ('dd/mm/yyyy', dtFechaFin.date);
  worksheet.range['A3:J5'].HorizontalAlignment := xlHAlignCenterAcrossSelection;
  WorkSheet.cells[_FilaTitulos,1] := 'Codigo';
  WorkSheet.cells[_FilaTitulos,2] := 'Trabajador';
  WorkSheet.cells[_FilaTitulos,3] := 'Fecha Solicitada';
  WorkSheet.cells[_FilaTitulos,4] := 'Monto hasta la fecha';
  WorkSheet.cells[_FilaTitulos,5] := 'Dcto.Trabajador';
  WorkSheet.cells[_FilaTitulos,6] := 'Dcto.Empresa';
  WorkSheet.cells[_FilaTitulos,7] := 'Importe Cesado';
  WorkSheet.cells[_FilaTitulos,8] := 'Total';
  WorkSheet.cells[_FilaTitulos,9] := 'Cant.Empresa';
  WorkSheet.cells[_FilaTitulos,10] := 'Cant. Subvencionada al 100%';
  i:= _FilaTitulos + 1;
  qryConsumos.First;
  while not qryConsumos.Eof do
  begin
        WorkSheet.cells[i,1].NumberFormat := '@';
        WorkSheet.cells[i,1] := _Ccos;
        WorkSheet.cells[i,2] := qryConsumosDescripcion.AsString;
...
...
         qryConsumos.Next;
   end;
  WorkSheet.Cells.Columns.AutoFit;
  WorkBook.SaveAs(fname);
  WorkBook.Close(fName);
  Excel.Quit;
end;

espero te sirva

AlbertoG 21-06-2011 22:14:03

Oscarac
Muchas gracias por tu pronta respuesta

Algo similar a lo que muestras lo había hecho antes cuando no tenía QR5 sino el que viene con delphi7 que creo que es la versión 3 pero entonces el problema que tenía era que no podía hacer que aparecieran bandas de subtotales entre los registros, es decir, es un reporte de venta de productos organizado por proveedor en un período de tiempo, de forma que cada que finalizan los productos vendidos de un proveedor se totaliza esa parte y a continuación vienen los productos de otro proveedor y así sucesivamente hasta que termina el reporte, bueno, eso no lo podía hacer con código, por lo que opté por la solución de instalar QR5 y ahora si puedo exportar directamente con el componente QRexcelfilter toda la data que necesito pero éste no respeta los anchos de las columnas e incluso coloca columnas vacias en excel entre los datos, por eso necesito saber como indicarle al componente (principalmente) los anchos que debe tener cada columna en excel y no veo como establecer comunicación con el componente a través de código, actualmente lo que hago es colocar el componente en el reporte y éste genera entonces la opción de que lo guarde en formato xls y ya, pero no sé como tratarlo a través de código.

Espero tu comentario al respecto, gracias

oscarac 21-06-2011 22:27:01

me parece que en ese componente no hay mucho que configurar... auqnue veo que yo uso el Qr 4.06

AlbertoG 21-06-2011 22:41:43

eso es lo que yo creo, pero entonces de ser así sabrías como puedo insertar esas bandas de subtotales en excel a través de código, es decir, las bandas "group footer" por ejemplo? de forma que pueda mostrar subtotales entre el reporte y no solo al final de éste, gracias

oscarac 21-06-2011 22:47:28

mmm eso me parece que tendrias que hacerlo en fomra manual
mas o menos el pseudocodigo seria asi

Código Delphi [-]
qryEjemplo.first
vCuenta := qryEjemploCuenta.asstring;
While not qryEjemplo.eof do
Begin
   While vCuenta = qryEjemploCuenta.Asstring do
   Begin
     ... instrucciones
   End
   // cuando la cuenta termine diferente coloco los totales y blanqueo las variables
   worksheet.cells [x,y] := 'Totales';
   vCuenta := qryEjemploCuenta.asstring;
end

y asi sucesivamente

AlbertoG 21-06-2011 22:52:44

Muy bien, pondré en práctica lo que me muestras, muchas gracias nuevamente y si encuentro la manera en base a tu pseudocódigo te dejo saber por un privado, gracias por tu tiempo.

AlbertoG

oscarac 21-06-2011 23:00:24

no al privado...
mejor por aqui


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

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