给你一个把DBGrid导出到Excel的函数把,其实Dbgrid显示的就是查寻得到的记录集 procedure SendToExcel(Form: TForm; DBGrid: TDBGrid); var eclApp, WorkBook: Variant; xlsFileName: String; i, j: Integer; FieldValue: String; SaveDialog: TSaveDialog; begin with Form do begin SaveDialog:= TSaveDialog.Create(Application); SaveDialog.DefaultExt:= '.xls'; SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*'; if SaveDialog.Execute then begin xlsFileName:= SaveDialog.FileName; try //创建OLE对象Excel Application与WorkBook eclApp:=CreateOleObject('Excel.Application'); WorkBook:=CreateOleobject('Excel.Sheet'); except ShowMessage('您的机器里未安裝Microsoft Excel!'); Exit; end; try WorkBook:= eclApp.workBooks.Add; for i:= 0 to DBGrid.Columns.Count - 1 do begin eclApp.Cells[1, i + 1]:= DBGrid.Columns.Items[i].Title.Caption; end; DBGrid.DataSource.DataSet.First; for i:= 0 to DBGrid.DataSource.DataSet.RecordCount - 1 do begin for j:= 0 to DBGrid.Columns.Count - 1 do begin FieldValue:= DBGrid.Columns[j].Field.AsString; eclApp.Cells[i + 2, j + 1]:=FieldValue; end; DBGrid.DataSource.DataSet.Next; end; if FileExists(xlsFileName) then begin if Application.MessageBox('文件已经存在!' + #13 + #10 + '是否进行替换?', '提示', MB_OKCANCEL + MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then begin DeleteFile(PChar(xlsFileName)); WorkBook.Saveas(xlsFileName); WorkBook.Close; eclApp.Quit; eclApp:= Unassigned; end; end else begin WorkBook.Saveas(xlsFileName); WorkBook.Close; eclApp.Quit; eclApp:= Unassigned; end; except ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开, 或系統错误。'); WorkBook.Close; eclApp.Quit; //釋放VARIANT变量 eclApp:=Unassigned; end; end; end; end;
procedure SendToExcel(Form: TForm; DBGrid: TDBGrid);
var
eclApp, WorkBook: Variant;
xlsFileName: String;
i, j: Integer;
FieldValue: String;
SaveDialog: TSaveDialog;
begin
with Form do
begin
SaveDialog:= TSaveDialog.Create(Application);
SaveDialog.DefaultExt:= '.xls';
SaveDialog.Filter:= 'Excel文件|*.xls|所有文件|*.*';
if SaveDialog.Execute then
begin
xlsFileName:= SaveDialog.FileName;
try
//创建OLE对象Excel Application与WorkBook
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安裝Microsoft Excel!');
Exit;
end; try
WorkBook:= eclApp.workBooks.Add; for i:= 0 to DBGrid.Columns.Count - 1 do
begin
eclApp.Cells[1, i + 1]:= DBGrid.Columns.Items[i].Title.Caption;
end;
DBGrid.DataSource.DataSet.First;
for i:= 0 to DBGrid.DataSource.DataSet.RecordCount - 1 do
begin
for j:= 0 to DBGrid.Columns.Count - 1 do
begin
FieldValue:= DBGrid.Columns[j].Field.AsString;
eclApp.Cells[i + 2, j + 1]:=FieldValue;
end;
DBGrid.DataSource.DataSet.Next;
end;
if FileExists(xlsFileName) then
begin
if Application.MessageBox('文件已经存在!' + #13 + #10 +
'是否进行替换?', '提示', MB_OKCANCEL +
MB_ICONQUESTION + MB_SYSTEMMODAL) = IDOK then
begin
DeleteFile(PChar(xlsFileName));
WorkBook.Saveas(xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
end
else
begin
WorkBook.Saveas(xlsFileName);
WorkBook.Close;
eclApp.Quit;
eclApp:= Unassigned;
end;
except
ShowMessage('不能正确操作Excel文件。可能是該文件已被其他程序打开, 或系統错误。');
WorkBook.Close;
eclApp.Quit;
//釋放VARIANT变量 eclApp:=Unassigned;
end;
end;
end;
end;