Ver Mensaje Individual
  #3  
Antiguo 05-01-2011
pemar_1976 pemar_1976 is offline
Registrado
NULL
 
Registrado: ene 2011
Posts: 2
Reputación: 0
pemar_1976 Va por buen camino
Gracias por contestar y si lo lei despues de crear este hilo.
jejejeje...

Bueno expondre en mas detalle.

Tengo una aplicacion en Delphi 7, conectada con Oracle, en un form tengo la muestra de pagos realizados en un periodo deteminado. La cantidad de registros mensualmente es de aproximadamente 90000. Nuestros usuarios requieren llevar dichos datos a Excel, para procesarlos. Ademas aca utilizamos Office 2007. Hasta ahora la forma de traspasar a excel, era utilizando el componente Excel de la paleta Server o a traves de la unidad cxExportGrid4Link. que proporciona una herramienta para enviar directamente a excel los datos contenidos en una QuantumGrid. Revisando aca que forma puedo enviar los datos a Excel 2007, encontre la que utilizan el CreateOleObject. adjunto codigo

Código Delphi [-]

var
   Excel : OleVariant;
   Libro : OleVariant;
   Hoja  : OleVariant;
   Fila,
   i     : integer;
begin
   Excel := ComObj.CreateOleObject('Excel.Application');

   Libro := Excel.Workbooks.Add();
   Hoja := Libro.WorkSheets[1];

   Hoja.Cells[1,1] := 'PERIODO ['+ cxPeriodos.Text +']';
   Hoja.Range['A1', 'M1'].Merge;
   Hoja.Cells[2, 01] := 'Id Haber';
   Hoja.Cells[2, 02] := 'Estado Actual Pago';
   Hoja.Cells[2, 03] := 'Fecha Registro Pago';
   Hoja.Cells[2, 04] := 'Vencimiento';
   Hoja.Cells[2, 05] := 'Monto Pagado';
   Hoja.Cells[2, 06] := 'Fecha Gen. Plano';
   Hoja.Cells[2, 07] := 'Nombre Plano';
   Hoja.Cells[2, 08] := 'Tipo Seguro';
   Hoja.Cells[2, 09] := 'Estado Seguro';
   Hoja.Cells[2, 10] := 'Tarjeta';
   Hoja.Cells[2, 11] := 'Nombre Cliente';
   Hoja.Cells[2, 12] := 'Apellido Cliente';
   Hoja.Cells[2, 13] := 'Póliza';

   qPag.DisableControls;
   qPag.First;

   Fila := 3;
   While not( qPag.Eof ) Do
   Begin
      Procesando('Registro ' + IntToStr( Fila - 3 ) + ' de ' + IntToStr( qpag.RecordCount ));
      Hoja.Cells[Fila, 01] := qPagID_HABER.AsString;
      Hoja.Cells[Fila, 02] := qPagPAGO_ESTADO_ACTUAL.AsString;
      Hoja.Cells[Fila, 03] := qPagFECHA_REGISTRO_BD.AsString;
      Hoja.Cells[Fila, 04] := qPagFECHA_VENCIMIENTO.AsString;
      Hoja.Cells[Fila, 05] := qPagMONTO_PAGADO.AsString;
      Hoja.Cells[Fila, 06] := qPagFECHA_GENERACION_PLANO.AsString;
      Hoja.Cells[Fila, 07] := qPagNOMBRE_PLANO.AsString;
      Hoja.Cells[Fila, 08] := qPagTIPO_SEGURO.AsString;
      Hoja.Cells[Fila, 09] := qPagESTADO_SEGURO.AsString;
      Hoja.Cells[Fila, 10] := qPagID_TARJETA.AsString;
      Hoja.Cells[Fila, 11] := qPagNOM_ASEGURADO.AsString;
      Hoja.Cells[Fila, 12] := qPagAPP_ASEGURADO.AsString;
      Hoja.Cells[Fila, 13] := qPagNUM_POLIZA.AsString;
      inc( Fila );
      qPag.Next;
   End;

   qPag.First;
   qPag.EnableControls;
   Procesando('');

  Excel.Visible := true;

Lo que me sucede que al tratar de generar la fila 65537, el proceso genera error, por ser mas del maximo permitido, pero Excel 2007 soporta mas de 1 Millon de registros.

Hasta el momento la unica solucion que he logrado realizar sin problemas es la de generar un archivo de texto separado por tabs, y abrirlo en Excel.

Existe alguna forma de hacerlo directamente en Excel sin que implique estar preocupado de la cantidad de registros.

Desde ya muchas gracias
Responder Con Cita