1、如何将delphi的dbgrid导出为excel表unit unit2;interface uses forms,SysUtils,ComCtrls,DBGrids,DB,Dialogs,Messages,Windows,ComObj,Controls,ADODB,StdCtrls,Graphics;function ProgressBarform(max:integer):tProgressBar;function ExportToExcel(dbgrid:tdbgrid):boolean;implementationuses unit1;/生成一个显示进度条的窗体function Prog
2、ressBarform(max:integer):tProgressBar; var ProgressBar1:TProgressBar; form:tform; begin application.CreateForm(tform,form); form.Position:=poScreenCenter; form.BorderStyle:=bsnone; form.Height:=30; form.Width:=260; ProgressBar1:=TProgressBar.Create(form); ProgressBar1.Visible:=true; ProgressBar1.Smo
3、oth:=true; ProgressBar1.Max:=max; ProgressBar1.ParentWindow:=form.Handle; ProgressBar1.Height:=20; ProgressBar1.Width:=250; ProgressBar1.Left:=form.Left+5; ProgressBar1.Top:=form.Top+5; ProgressBar1.Step:=1; form.show; result:=ProgressBar1; end;/将DBGRID中的内容导入到EXCEL中function ExportToExcel(dbgrid:tdbg
4、rid):boolean; const xlNormal=-4143; var i,j,k:integer; str,filename:string; excel:OleVariant; SavePlace: TBookmark; savedialog:tsavedialog; ProgressBar1:TProgressBar; begin result:=false; filename:=; if then begin if application.messagebox(需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?,询问,mb_yesno+mb_iconquest
5、ion)=idno then exit; end; screen.Cursor:=crHourGlass; try excel:=CreateOleObject(Excel.Application); ; except screen.cursor:=crDefault; showmessage(无法调用Excel!); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.Filter:=Excel文件(*.xls)|*.xls; if savedialog.Execute then begin if FileExists(sav
6、edialog.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.cursor:=crDefault; Exit; end; filen
7、ame:=savedialog.FileName; end; savedialog.free; application.ProcessMessages; if filename= then begin result:=false; Excel.Quit; screen.cursor:=crDefault; exit; end; k:=0; for i:=0 to do begin if then begin /Excel.Columnsk+1.ColumnWidth:=; excel.cells1,k+1:=i.Title.Caption; inc(k); end; end; ; savepl
8、ace:=; ; i:=2; if then ProgressBar1:=ProgressBarform(65536) else ProgressBar1:=ProgressBarform(; while not do begin k:=0; for j:=0 to do begin if then begin excel.cellsi,k+1.NumberFormat:=; if not j.FieldName).isnull then begin str := j.FieldName).value; Excel.Cellsi, k + 1 := Str; end; inc(k); end
9、else continue; end; if i=65536 then break; inc(i); ProgressBar1.StepBy(1); ; end; ; application.ProcessMessages; ; ; try if copy(FileName,length(FileName)-3,4).xls then FileName:=FileName+.xls; ,xlNormal, ,False,False); except Excel.Quit; screen.cursor:=crDefault; exit; end; /Excel.Visible := true;
10、Excel.Quit; screen.cursor:=crDefault; Result:= true; end;end.引用是直接引用该函数就可以了ExportToExcel(dbgrid1)以下是原文含ado连接方式的函数,一般我们都用DBGRID中的内容导入到EXCEL中unit U_func;interface uses forms,SysUtils,ComCtrls,DBGrids,DB,Dialogs,Messages,Windows,ComObj,Controls,ADODB,StdCtrls,Graphics;function ProgressBarform(max:integ
11、er):tProgressBar;function ExportToExcel(dbgrid:tdbgrid):boolean;function queryExportToExcel(queryexport:tadoquery):boolean;implementation/生成一个显示进度条的窗体function ProgressBarform(max:integer):tProgressBar; var ProgressBar1:TProgressBar; form:tform; begin application.CreateForm(tform,form); form.Position
12、:=poScreenCenter; form.BorderStyle:=bsnone; form.Height:=30; form.Width:=260; ProgressBar1:=TProgressBar.Create(form); ProgressBar1.Visible:=true; ProgressBar1.Smooth:=true; ProgressBar1.Max:=max; ProgressBar1.ParentWindow:=form.Handle; ProgressBar1.Height:=20; ProgressBar1.Width:=250; ProgressBar1.
13、Left:=form.Left+5; ProgressBar1.Top:=form.Top+5; ProgressBar1.Step:=1; form.show; result:=ProgressBar1; end;/将DBGRID中的内容导入到EXCEL中function ExportToExcel(dbgrid:tdbgrid):boolean; const xlNormal=-4143; var i,j,k:integer; str,filename:string; excel:OleVariant; SavePlace: TBookmark; savedialog:tsavedialo
14、g; ProgressBar1:TProgressBar; begin result:=false; filename:=; if then begin if application.messagebox(需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?,询问,mb_yesno+mb_iconquestion)=idno then exit; end; screen.Cursor:=crHourGlass; try excel:=CreateOleObject(Excel.Application); ; except screen.cursor:=crDefault; s
15、howmessage(无法调用Excel!); exit; end; savedialog:=tsavedialog.Create(nil); 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.Fi
16、leName) else begin Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; except Excel.Quit; savedialog.free; screen.cursor:=crDefault; Exit; end; filename:=savedialog.FileName; end; savedialog.free; application.ProcessMessages; if filename= then begin result:=false; Excel.Quit; screen.cu
17、rsor:=crDefault; exit; end; k:=0; for i:=0 to do begin if then begin /Excel.Columnsk+1.ColumnWidth:=; excel.cells1,k+1:=; inc(k); end; end; ; saveplace:=; ; i:=2; if then ProgressBar1:=ProgressBarform(65536) else ProgressBar1:=ProgressBarform(; while not do begin k:=0; for j:=0 to do begin if then b
18、egin excel.cellsi,k+1.NumberFormat:=; if not then begin str := ; Excel.Cellsi, k + 1 := Str; end; inc(k); end else continue; end; if i=65536 then break; inc(i); ProgressBar1.StepBy(1); ; end; ; application.ProcessMessages; ; ; try if copy(FileName,length(FileName)-3,4).xls then FileName:=FileName+.x
19、ls; ,xlNormal, ,False,False); except Excel.Quit; screen.cursor:=crDefault; exit; end; /Excel.Visible := true; Excel.Quit; screen.cursor:=crDefault; Result:= true; end;/将ADOQUERY的数据集导入到EXCEL中function queryExportToExcel(queryexport:tadoquery):boolean; const xlNormal=-4143; var i,j,k:integer; str,filen
20、ame:string; excel:OleVariant; savedialog:tsavedialog; ProgressBar1:TProgressBar; begin result:=false; filename:=; if queryexport.RecordCount65536 then begin if application.messagebox(需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?,询问,mb_yesno+mb_iconquestion)=idno then exit; end; screen.Cursor:=crHourGlass; try
21、 excel:=CreateOleObject(Excel.Application); ; except screen.cursor:=crDefault; showmessage(无法调用Excel!); exit; end; savedialog:=tsavedialog.Create(nil); savedialog.Filter:=Excel文件(*.xls)|*.xls; if savedialog.Execute then begin if FileExists(savedialog.FileName) then try if application.messagebox(该文件已
22、经存在,要覆盖吗?,询问,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.cursor:=crDefault; Exit; end; filename:=savedialog.FileName; end; savedialog.free; applicati
23、on.ProcessMessages; if filename= then begin result:=false; Excel.Quit; screen.cursor:=crDefault; exit; end; k:=0; for i:=0 to queryexport.FieldCount-1 do begin excel.cells1,k+1:=queryexport.Fieldsi.FieldName; inc(k); end; queryexport.First; i:=2; if queryexport.recordcount65536 then ProgressBar1:=Pr
24、ogressBarform(65536) else ProgressBar1:=ProgressBarform(queryexport.recordcount); while not queryexport.Eof do begin k:=0; for j:=0 to queryexport.FieldCount-1 do begin excel.cellsi,k+1.NumberFormat:=; if not queryexport.fieldbyname(queryexport.Fieldsj.FieldName).isnull then begin str:=queryexport.f
25、ieldbyname(queryexport.Fieldsj.FieldName).AsString; Excel.Cellsi, k + 1 := Str; end; inc(k); end; if i=65536 then break; inc(i); ProgressBar1.StepBy(1); queryexport.next; end; ; application.ProcessMessages; try if copy(FileName,length(FileName)-3,4).xls then FileName:=FileName+.xls; ,xlNormal, ,False,False); except Excel.Quit; screen.cursor:=crDefault; exit; end; /Excel.Visible := true; Excel.Quit; screen.cursor:=crDefault; Result := true; end;end.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1