delphi写的导出excel程序 运行一次程序只导出一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi写的导出excel程序 运行一次程序只导出一次相关的知识,希望对你有一定的参考价值。

procedure TsearchMain.Button2Click(Sender: TObject);
var
i,j,row,nall:integer;
//resultTypeByCondition: String;
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;

begin
//查询是不是有数据
if (DataModule1.ADOQuery1.State=dsInactive) then exit;
if (DataModule1.ADOQuery1.RecordCount <=0) then exit;

//生成excel相关控件,并检测是否安装了excel
try
ExcelApplication1 := TExcelApplication.Create(Application);
ExcelWorksheet1 := TExcelWorksheet.Create(Application);
ExcelWorkbook1 := TExcelWorkbook.Create(Application);
except
Application.Messagebox('电脑未安装Office中的Excel,必须安装才能使用Excel导出数据功能!', '提示', MB_ICONERROR + mb_Ok);
exit;
end;
with DataModule1.ADOQuery1 do
begin
Close;
SQL.Clear;
sql.Add('select* from call_out_result');
ExecSQL;

end;
if SaveDialog1.Execute
then // 打开保存窗口,让用户选择保存的文件名
begin //inintial excel 初始化EXCEL
DataModule1.ADOQuery1.Open;
DataModule1.ADOQuery1.Active:=true;
ExcelApplication1.Connect;
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorkSheet1.ConnectTo(ExcelWorkBook1.Sheets[1] as _WorkSheet);

begin
DataModule1.ADOQuery1.Open;
DataModule1.ADOQuery1.Active:=true;
nall:=DataModule1.ADOQuery1.RecordCount; //保存记录的数量
row:=0; //初始化行,定位在第一 行

for j:=0 to DataModule1.Adoquery1.Fields.Count-1 do // column name,统计共有的列数目,把列名逐列导出到EXCEL第一行
begin
DataModule1.ADOQuery1.Open;
DataModule1.ADOQuery1.Active:=true;
ExcelWorksheet1.Cells.item[1, j+1] := DataModule1.Adoquery1.Fields[j].DisplayName //.DisplayLabel;
end;
for i:=0 to nall-1 do // total rows 正规记录,从第一条记录一直到最后循环
while not DataModule1.Adoquery1.Eof do //只要记录没到最后就执行以下动作
begin
for j:=0 to DataModule1.Adoquery1.Fields.Count-1 do // column逐列导出动作
begin
ExcelWorkSheet1.Cells.Item[row+2,j+1]:=DataModule1.Adoquery1.Fields[j].AsString; //〔行,列〕
end;
row:=row+1; //行进行增量
DataModule1.ADOQuery1.Next; //到下一条记录
end;
end;
//以下是导出完毕后的动作,
ExcelWorkBook1.SaveCopyAs(SaveDialog1.FileName+'.xls'); //加后缀名,确保最后是EXCEL文件
ExcelWorkBook1.Close(false);
ExcelApplication1.Disconnect; //断开与EXCEL的连接
Screen.Cursor:=crDefault; //指针随记录而动
Application.Messagebox('查询的数据成功导出到Excel文件中!', '提示', MB_ICONINFORMATION + mb_Ok);
end;

end;

这是源程序 请问怎么解决,点击导出按钮就要他弹出保存的对话框,现在编译一次 只能出现一次保存对话框。

参考技术A 原因是在程序结束时对象 ExcelApplication1 没有能释放吧。加上对此对象释放的语句再试试呢。

以上是关于delphi写的导出excel程序 运行一次程序只导出一次的主要内容,如果未能解决你的问题,请参考以下文章

delphi dbgrideh部分导出excel出错

DELPHI导出EXCEL问题

delphi 导出excel

delphi 导出excel

怎么从delphi应用程序中获取数据集的数据

delphi7连接oracle、dbf间的数据导出、导入