delphi 的一个导出excel的方法的类
2013-01-02 09:34
381 查看
导出方法 Button procedure 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; interface uses 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.
相关文章推荐
- Delphi 导出、导入Excel的一个快速方法
- DbgridEh数据导出到Excel的方法(Delphi)--适用Ehlib7.0+D7
- delphi 导出到excel的7种方法
- 用OleDb写的一个导出Excel的方法
- 导出excel时数量太多的一个方法
- Delphi数据导出到EXCEL方法
- Java利用xml将大批量数据导出到excel的一个方法
- 浅谈控件(组件)制作方法一(附带一delphi导出数据到Excel的组件实例)(原创)
- Java利用xml将大批量数据导出到excel的一个方法
- PHP导出Excel一个方法轻松搞定
- 分享另外一个导出Excel的方法
- 一个很好的用C#导出数据到Excel模板的方法
- delphi导出数据至Excel的七种方法及比较
- delphi导出数据至Excel的七种方法
- 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
- Delphi 导出数据至Excel的7种方法【转】
- delphi导出数据至Excel的七种方法及比较
- 一个导出指定包下 spring Controller excel清单的例子(包括包名、类名、方法名、访问路径)
- Java利用xml将大批量数据导出到excel的一个方法
- 这是一个gridview导出到Excel的代码方法