博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
delphi 的一个导出excel的方法的类
阅读量:2066 次
发布时间:2019-04-29

本文共 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/

你可能感兴趣的文章
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>