1 現象描述
if (!appExcel.CreateDispatch("Excel.Application")) { return FALSE; } wbsBooks.AttachDispatch(appExcel.get_Workbooks()); lpDisp = wbsBooks.Open(m_csXlsPath,covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption, covOption); wbBook.AttachDispatch(lpDisp); lpDisp = wbBook.get_ActiveSheet(); wsSheet.AttachDispatch(lpDisp); rangeBasicCells.AttachDispatch(wsSheet.get_Cells()); rangeUsedCells.AttachDispatch(wsSheet.get_UsedRange()); rangeTempCells.AttachDispatch(rangeUsedCells.get_Columns()); lMaxColNum = rangeTempCells.get_Count(); rangeTempCells.AttachDispatch(rangeUsedCells.get_Rows()); lMaxRowNum = rangeTempCells.get_Count(); lStartCol = rangeUsedCells.get_Column(); lStartRow = rangeUsedCells.get_Row(); rangeUsedCells.ReleaseDispatch(); rangeTempCells.ReleaseDispatch(); GetInfoFromExc(rangeBasicCells, lMaxRowNum); rangeBasicCells.ReleaseDispatch(); wsSheet.ReleaseDispatch(); wbBook.ReleaseDispatch(); wbsBooks.Close(); wbsBooks.ReleaseDispatch();//*****標記1****** appExcel.Quit(); appExcel.ReleaseDispatch();
以上代碼中,最初,註釋爲“//*****標記1******”這行代碼並不存在,執行代碼後Excel進程並不會從後臺結束。當加上這行代碼後Excel進程纔會從後臺結束。原因是,wbsBooks沒有釋放,appExcel不能退出。
2 該類問題解決方法
1)查看與Execl相關的變量是否全部都ReleaseDispatch了。
2)查看與Execl相關的變量在關閉和釋放的時候順序是否正確。比如,要先使用Close(),後使用ReleaseDispatch。
該解決方法總結於[vc excel Quit 無法關閉excel進程,急啊!!!!!](http://bbs.csdn.net/topics/390039312?page=1#post-395362721)