Ver Mensaje Individual
  #8  
Antiguo 28-03-2022
marco3k marco3k is online now
Miembro
 
Registrado: feb 2015
Posts: 61
Reputación: 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