delphi 导出数据至Excel 的几种方法及比较 一、delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; aSheet :Variant; excel :OleVariant; savedialog :tsavedialog; begin Result := true; try excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except //screen.cursor:=crDefault; showmessage('无法调用 Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.FileName:=sfilename; //存入文件 savedialog.Filter:='Excel 文件(*.xls)|*.xls'; if savedialog.Execute then begin if FileExists(savedialog.FileName) then try if application.messagebox(' 该 文 件 已 经 存 在 , 要 覆 盖 吗 ? ',' 询 问',mb_yesno+mb_iconquestion)=idyes then DeleteFile(PChar(savedialog.FileName)) else begin Excel.Quit; savedialog.free; //screen.cursor:=crDefault; Exit; end; except Excel.Quit; savedialog.free; screen.cu rsor:=crDefau lt; Ex it; end; filename:=sav edialog.FileName; end; sav edialog.free; if filename='' then begin resu lt:=tru e; Ex cel.Qu it; //screen.cu rsor:=crDefau lt; ex it; end; aSheet:=ex cel.Worksheets.Item[1]; tsList:=TStringList.Create; //tsList.Add('查询结果'); //加入标题 s:=''; //加入字段名 for y := 0 to adoqu ery .fieldCou nt - 1 do begin s:=s+adoQu ery .Fields.Fields[y ].FieldName+#9 ; Application.ProcessMessages; end; tsList.Add(s); try try ADOQu ery .First; While Not ADOQu ery .Eof do begin s:=''; for y :=0 to ADOQu ery .FieldCou nt-1 do begin s:=s+ADOQu ery .Fields[y ].AsString+#9; Application.ProcessMessages; end; tsList.Add(s); ADOQu ery .nex t; end; Clipboard.AsTex t:=tsList.Tex t; ex cept resu lt:=false; end; finally tsList.Free; end; aSheet.Paste; MessageBox (Application.Handle,'数据导出完毕!','系统提示',MB_ICONINFORMATION or MB_O...