2012-08-28 209 views
0

我曾嘗試:如何完全關閉Excel應用程序/工作簿?

while (System::Runtime::InteropServices::Marshal::ReleaseComObject(worksheet_instance) > 0) ; 
workbook_instance->Close(true, "Dummy.xlsx", Missing::Value); 
while (System::Runtime::InteropServices::Marshal::ReleaseComObject(workbook_instance) > 0) ; 
workbook_instance->~Workbook(); 
exApp_instance->Quit(); 
exApp_instance->~Application(); 

但它不會終止Excel應用程序(我仍然可以看到它在任務管理器)。 作爲一個嘗試,我想這樣做

workbook_instance = NULL; 

,但它是不能接受的。 有什麼建議嗎? 謝謝。

+0

成功請參考以下鏈接。儘管它在C#中,但你會得到一個想法。 [如何正確清理C#中的Excel互操作對象](http://stackoverflow.com/questions/158706/how-to-properly-clean-up-excel-interop-objects-in-c-sharp)[如何做你關閉Excel COM對象並保存工作?](http://stackoverflow.com/questions/686789/how-do-you-close-excel-com-object-and-save-the-work) –

回答

0

謝謝@amaldev
據第一個鏈接收集了一些想法,我

try{ 
    while (System::Runtime::InteropServices::Marshal::ReleaseComObject(ws) > 0) ; 
} catch(...) {} 

wb->Close(false, Missing::Value, Missing::Value); 
try { 
    while (System::Runtime::InteropServices::Marshal::ReleaseComObject(wb) > 0) ; 
} catch(...) {} 

exApp->Quit(); 
try { 
    while (System::Runtime::InteropServices::Marshal::ReleaseComObject(exApp) > 0) ; 
} 
catch(...) {} 

System::GC::Collect(); 
System::GC::WaitForPendingFinalizers(); 
相關問題