前几天问过这个问题,很多朋友给了我回答。本以为解决了。但现在新问题又来了。
代码如下:
 ...
 ExcelApp,workbook: Variant; 
 ...
 ExcelApp:=CreateOleObject('Excel.Application');
 workbook:=CreateOleObject('Excel.sheet');
上次大家给我的代码是:
workbook.close;
ExcelApp.quit;
workbook:=unassigned;
excelapp:=unassigned;
这些代码放在窗口的onclose方法里没问题,当窗口释放后,EXCEL对象也会中内存中清出。但我如果把这些代
码放在其他地方,比如按钮的onclick里,就不行了,点了按钮后,EXCEL对象还是驻留在内存里。我的程序的功能是把excel表中的数据导入到access里。我的想法是导入完一个excel表后,先把excel对象释放,然后可以继续选另一个要导入的excel表。我把释放的代码放在导入按钮里。但结果是,导入数据后,excel对象不能释放。再选其他excel表,再按导入键,就会出错。
请问应该怎样才能通过单击按钮释放excel对象?

解决方案 »

  1.   

    放在try finally excelapp:=unassigned; end行吗?
      

  2.   

    workbook没有释放
    其实不用WorBook也行,如下:
    Try
     ExcelApp:= CreateOleObject( 'Excel.Application' );
     ExcelApp.WorkBooks.Open(YourXlsFileName);//打开Excel文件
     ExcelApp.WorkSheets[1].Activate;//设定第一个Sheet为活动的 ExcelApp.Cells[i,j].Value:=YourString;//向单元格中写数据
     YourString:=ExcelApp.ActiveSheet.Cells.item[i,j]); //读取单元格. ExcelApp.ActiveSheet.PrintOut;//答应
     ExcelApp.ActiveWorkBook.SaveAs(SavedFileName);//存盘
     ExcelApp.Quit;
     ExcelApp:=UnAssigned; 
    Except
     Try //多用一个Try..Finally是防止在读写单元格过程中出错,退出时可能没有释放Excel,造成内存漏洞
      ExcelApp.ActiveWorkBook.Saved := True;
      ExcelApp.Quit;
     Finally
      ExcelApp:=UnAssigned;
     End;
    End;
      

  3.   

    to turbozzh(涡轮超人):先感谢你给我篇幅这么长的解答。但你给出的这段代码还是不能奖excel对象清出内存。我现在没用workbook了,我的代码是这样写的:try
    ExcelApp:=CreateOleObject('Excel.Application');
    ...
    finally
    ExcelApp.quit;
    excelapp:=unassigned;
    end;我把以上代码块放在一个按钮里。我想执行完功能后,excel对象也清出内存,但不行。只有在整个程序退出时excel对象才会清出内存。我试着在窗口的onclose里写入:
    ExcelApp.quit;
    excelapp:=unassigned;
    一执行就会出现错误,提示如下:'Variant does not refrence an automation object',好象excelapp变量已经是不指向excel对象了,但该对象还驻留在内存里。请指点,到底怎样才能将excel对象清出内存?
      

  4.   

    Ole对象是由Windows自动管理的吧。需要手动去释放吗?
      

  5.   

    但我的程序不存在这样的问题,也是在按钮Click事件中写如上代码,执行完毕后,TaskMsg中无Excel进程。
      

  6.   

    谢谢各位的支持,这几天太忙没时间上来结贴,turbozzh(涡轮超人)的答案是对的。感谢!