PDA

Ver la Versión Completa : Exportando a Excel desde Quickreport 5


AlbertoG
21-06-2011, 20:30:05
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

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


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