本文共 3106 字,大约阅读时间需要 10 分钟。
导出方法Buttonprocedure TFrm_ClientGameRecord.Act_ExportExecute(Sender: TObject);var ToExcel:TTOExecel;begin ToExcel:=TTOExecel.Create(GetTreeTopNode(Tree_Time.Selected).Text+'_交易记录.xls'); try ToExcel.ToExcel(DBGrid_ChongZhi,Gauge_Export); finally ToExcel.Free; end;end;导出类:unit ToExcel_Class;interfaceuses db,Adodb,Grids, DBGrids,windows,SysUtils,Gauges,forms,Dialogs;{ TTOExecel }type TTOExecel = class(TObject) private FFileName:string; FSaveDlg:TSaveDialog; FFileHandle:THandle; protected public constructor Create(FileName:string); destructor Destroy; override; //导出到Excel。返回导出的记录数。 Function ToExcel(DBGrid:TDBGrid;Pre:TGauge=nil):integer; //写文件 function WriteFile(FHandle:thandle; LogTxt: string): byte; published end;implementation{ TTOExecel }constructor TTOExecel.Create(FileName:string);begin FFileName:=FileName; FSaveDlg:=TSaveDialog.Create(nil); FSaveDlg.DefaultExt:='.xls'; FSaveDlg.Filter:='Excel 文件|*.xls|所有文件|*.*'; FSaveDlg.FileName :=FileName;end;destructor TTOExecel.Destroy;begin FSaveDlg.Free; inherited;end;function TTOExecel.WriteFile(FHandle:thandle; LogTxt: string): byte;var FileB: pchar; FileLen:integer;begin try LogTxt := LogTxt + #13 + #10; GetMem(Fileb, length(LogTxt)+10); fillchar(Fileb[0], length(LogTxt)+10, #0); move(LogTxt[1], fileb[0], length(LogTxt)); if (FHandle >0) then begin FileLen:=FileSeek(FHandle, int64(0), 2); if FileLen >=0 then begin if FileWrite(FHandle, fileb[0], length(LogTxt))>0 then begin FreeMem(FileB); result := 0; end else Result:=1; end else Result:=2; end else Result:=3; except result := 4; end;end;function TTOExecel.ToExcel(DBGrid: TDBGrid;Pre:TGauge=nil): integer;var i,j:integer; ExecelRows:string; RecNo:integer;begin Recno:=DBGrid.DataSource.DataSet.RecNo; ExecelRows:=''; if not FSaveDlg.Execute then exit; //if FileExists(FSaveDlg.FileName) then // DeleteFile(FSaveDlg.FileName); FFileHandle :=FileCreate(FSaveDlg.FileName); try for i:=0 to DBGrid.Columns.Count -1 do begin if DBGrid.Columns[i].Visible then ExecelRows:=ExecelRows+DBGrid.Columns[i].Title.Caption +char(VK_TAB); end; WriteFile(FFileHandle,ExecelRows); DBGrid.Enabled :=false; DBGrid.DataSource.DataSet.First; if Assigned(pre) then begin pre.Visible :=true; pre.MaxValue :=DBGrid.DataSource.DataSet.RecordCount; end; for i:=1 to DBGrid.DataSource.DataSet.RecordCount do begin Application.ProcessMessages; sleep(1); if Assigned(pre) then pre.Progress :=i; ExecelRows:=''; for j:=0 to DBGrid.Columns.Count -1 do begin if DBGrid.Columns[j].Visible then ExecelRows:=ExecelRows+DBGrid.Fields[j].Text+char(vk_tab); end; WriteFile(FFileHandle,ExecelRows); DBGrid.DataSource.DataSet.Next; end; if Assigned(pre) then Pre.Visible :=false; DBGrid.Enabled :=true; DBGrid.DataSource.DataSet.RecNo:=RecNo; finally FileClose(FFileHandle); end;end;end.
转载地址:http://qyymf.baihongyu.com/