导出方法
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的方法的类
最新推荐文章于 2018-07-17 10:30:48 发布