如题:我每次随机查询10条数据,每次都不一样,查询一次,我把她导出生成EXCEL,第一次可以把查询数据导入,但第2次就不可以~~
导出EXCEL文件的代码:
var
        i,row,column:integer;
begin
        Try
                ExcelApplication1.Connect;
        Except
                MessageDlg('Excel may not be installed',mtError, [mbOk], 0);
                Abort;
        End;
        ExcelApplication1.Visible[0]:=True;
        ExcelApplication1.Caption:='Excel Application';
        ExcelApplication1.Workbooks.Add(Null,0);
        ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
        ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);
        ADOQuery1.Open;
        row:=1;
        While Not(ADOQuery1.Eof) do
        begin
                column:=1;
                for i:=1 to ADOQuery1.FieldCount do
                begin
                ExcelWorksheet1.Cells.Item[row,column]:=ADOQuery1.fields[i-1].AsString;
                column:=column+1;
                end;
        ADOQuery1.Next;
        row:=row+1;
        end;end;
谢谢~~~在线等~~

解决方案 »

  1.   

    ExcelApplication1.quit;
    ExcelApplication1.disconnect;
    在退出时加上以上代码
      

  2.   

    晕~刚才写了那么多,说什么超时违规~重新打过了,就是我这个程序不是每导出一个EXCEL文件就关闭,打开程序以后,可以导出多个EXCEL文件,但是在第2次导出的时候出现问题,EXCEL打开了,但是并没有显示数据,(sheet没有显示)。所以我想每次按 导出 的时候判断EXCEL是否打开一个文件,如果打开,就保存关闭。谢谢
    ===
      

  3.   

    While Not(ADOQuery1.Eof) do
            begin
                    column:=1;
                    for i:=1 to ADOQuery1.FieldCount do
                    begin
                    ExcelWorksheet1.Cells.Item[row,column]:=ADOQuery1.fields[i-1].AsString;
                    column:=column+1;
                    end;
            ADOQuery1.Next;
            row:=row+1;
            end;
            ExcelApplication1.quit;             ////////////后加
            ExcelApplication1.disconnect;      
    是想导出完当前结果集,就保存。可是
    报错,说内存地址不能读~~
      

  4.   

    为什么ExcelApplication1.quit;以后系统进程里还是有  excel.exe, 我发现只要有她,再次导出,SHEET就不会显示
      

  5.   

    那是因为在quit的时候,系统没有彻底清理excel的进程,以前也遇到过这个问题,后来怎么解决就记不太清楚了,我用的是 x:=createoleobject('excel.application');好像是把x全局变量改成局部变量了
      

  6.   

    楼上说的对,1、退出的时候没有 free。 2、重新导出的 时候没有重新建立
    现在搞好了,结帖~~