Hola,
He estado mirando codigos para pasar a excel desde un DBGrid y encontre este:
Código Delphi
[-]
unit ExportarExcel;
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.
El problema que tengo es que cuando pongo Exel2000 en Uses, me sale este error: Can't find unit Excel2000 used by Unit1.
Veo que a muchas personas les ha funcionado, nose si alguna de ellas me podria decir como soluciono este problema y ademas como hago para llamar este procedimiento desde la accion de click en un boton. Soy novato en lazarus.
duilioisola, la verdad no entendi tu respuesta. En donde queda el archivo CVS ???
Gracias