Estimado ycastilloa86,
Yo utilizo una función que he ido recopilando información hasta que he conseguilo lo que queria, bueno, aun me queda por refinarlo mas, pero me sirve.
Código Delphi
[-]unit FyPExportarExcel;
interface
uses
SysUtils, DB, DBGrids, ComCtrls, ComObj, Excel2000;
procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);
implementation
procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar);
procedure ProgressBarInit;
begin
ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
ProgressBarXls.Position := 0;
ProgressBarXls.Visible := True;
end;
const
xlWBATworksheet = -4167;
var
Excel, WorkBook, WorkSheet: OleVariant;
I, J: Integer;
PBookmark: TBookmark;
begin
PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
DBGrid.DataSource.DataSet.DisableControls;
DBGrid.DataSource.DataSet.First;
if (ProgressBarXls <> nil) then
ProgressBarInit;
Excel := CreateOleObject('Excel.Application');
Excel.DisplayAlerts := False;
WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);
WorkSheet := WorkBook.WorkSheets[1];
WorkSheet.Name := SheetName;
for J := 0 to DBGrid.FieldCount -1 do
if DBGrid.Fields[J].Visible then
begin
WorkSheet.Cells[1, J +1].Font.Bold := True;
WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
end;
for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
begin
for J := 0 to DBGrid.FieldCount -1 do
case DBGrid.Fields[J].DataType of
ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
ftBCD, ftFloat, ftCurrency: WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
ftDateTime, ftDate, ftTime: WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
else WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
end;
DBGrid.DataSource.DataSet.Next;
if (ProgressBarXls <> nil) then
ProgressBarXls.Position := ProgressBarXls.Position +1;
end;
if (ProgressBarXls <> nil) then
ProgressBarXls.Visible := False;
WorkSheet.Cells.Columns.AutoFit;
WorkBook.SaveAs(FileNameXLS);
WorkBook.Close(FileNameXLS);
Excel.Quit;
DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
DBGrid.DataSource.DataSet.EnableControls;
end;
end.
Un saludo.
P.D.: Si puedes aportar algo a esta función te lo agradecería.