前幾天問過這個問題,很多朋友給了我回答。本以為解決了。但現在新問題又來了。
代碼如下:
...
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對象?
解答:
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;