Amigos, yo tengo una plantilla en Excel y lo relleno de datos desde Delphi, todo bien, mi problema es que no sé cómo combinar celdas continuas donde los datos se repiten y convertirlo en una sóla celda, ¿algunos de ustedes han podido hacerlo?, tengo el siguiente código que me funciona perfectamente:
procedure TFValidaCR.CreaNominaExcel(ACarta: Integer); var ExcelApp, Libro: Variant; fila, i:integer; aPlantilla: String; begin aPlantilla := InitSettings.getReportsPath + '\Plantillas\NominaCR.xls'; if not FileExists(aPlantilla) then begin MessageDLG('No existe la plantilla para preparar la nómina',mtWarning,[mbOk],0); Exit; end; Reportes.QNominaCR.Close; try try Reportes.QNominaCR.Params[0].AsInteger := ACarta; try Reportes.QNominaCR.Open; if not Reportes.QNominaCR.IsEmpty then begin //svGuardar es un SaveDialog para poder especificar la ruta del archivo svGuardar.Title := 'Exportando Nómina a Excel'; svGuardar.DefaultExt := '*.xls'; svGuardar.Filter := 'Archivos Excel (*.xls,*.xlsx)|*.xls;*.xlsx'; svGuardar.FilterIndex := 1; try svGuardar.Execute; if (svGuardar.FileName <> '') then begin //Deshabilitamos los controles Reportes.QNominaCR.DisableControls; //Creamos el archivo Excel ExcelApp := CreateOleObject('Excel.Application'); //Evitamos mostrar las alertas propias de Excel ExcelApp.DisplayAlerts := false; // Colocamos el Nombre de la Hoja ExcelApp.WorkBooks.Open(aPlantilla,null,null,null,null,null,null,null,null,True,null,null,null,null,0); // Activamos la hoja la cual trabajaremos Libro := ExcelApp.WorkBooks[1].ActiveSheet; // Ahora cargaremos los datos //Empezamos desde la cuarta fila //De la plantilla NominaCR fila := 4; //Lo dejamos en Segundo Plano ExcelApp.Visible := False; Libro.Cells[1,1].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('CONS_NOMBRE').AsString)); Libro.Cells[1,1] := Reportes.QNominaCR.FieldByName('CONS_NOMBRE').AsString; Reportes.QNominaCR.First; while not Reportes.QNominaCR.eof do begin //Nombre del Empleado Libro.Cells[fila,2].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('EMP_NOMBRE').AsString)); Libro.Cells[fila,2] := Reportes.QNominaCR.FieldByName('EMP_NOMBRE').AsString; //Cédula Empleado Libro.Cells[fila,3].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('EMP_CEDULA').AsString)); Libro.Cells[fila,3] := Reportes.QNominaCR.FieldByName('EMP_CEDULA').AsString; //Cargo en nomina Libro.Cells[fila,4].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('CARGO_NOMBRE').AsString)); Libro.Cells[fila,4] := Reportes.QNominaCR.FieldByName('CARGO_NOMBRE').AsString; //Provincia Libro.Cells[fila,5].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('PROVINCIA_NOMBRE').AsString)); Libro.Cells[fila,5] := Reportes.QNominaCR.FieldByName('PROVINCIA_NOMBRE').AsString; //Tipo tarifa Libro.Cells[fila,6].NumberFormat := RPad('0', '0', Length(Reportes.QNominaCR.FieldByName('TIPO_TARIFA').AsString)); Libro.Cells[fila,6] := Reportes.QNominaCR.FieldByName('TIPO_TARIFA').AsString; //Fecha Libro.Cells[fila,7].NumberFormat := RPad('0', '0', Length(FormatDateTime('dd/MM/yyyy',Reportes.QNominaCR.FieldByName('CR_FECHA').AsDateTime))); Libro.Cells[fila,7] := FormatDateTime('dd/MM/yyyy',Reportes.QNominaCR.FieldByName('CR_FECHA').AsDateTime); //Monto Tarifa Libro.Cells[fila,8].NumberFormat := '0.00'; Libro.Cells[fila,8] := Reportes.QNominaCR.FieldByName('monto_tarifa').AsCurrency; //Autofijamos las columnas //Libro.Cells.Columns.Autofit; //Siguiente Fila Inc(Fila); //AProgreso.Position := AProgreso.Position + 1; Reportes.QNominaCR.Next; end; Reportes.QNominaCR.EnableControls; Libro.SaveAs(svGuardar.FileName); ExcelApp.Visible := True; end; //if svGuardar.FileName <> '' except ExcelApp.Quit; //AProgreso.Visible := False; Showmessage('No se pudo crear el Archivo Excel.'); raise; end; end; //if not is empty except on E:EFDDBEngineException do begin MostrarError('Verificación Carta de Ruta',E.ClassName,'¡Ocurrió un problema al intentar preparar la nómina!',E.Message,Usuario,Equipo); Exit; end; end; except on E:EFDDBEngineException do begin MostrarError('Verificación Carta de Ruta',E.ClassName,'¡Ocurrió un problema al intentar preparar la nómina!',E.Message,Usuario,Equipo); Exit; end; end; finally Reportes.QNominaCR.Close; end; end;
Saludos.