小弟VC中从EXCEL文件中读取信息,读完后,退出EXCEL进程,但是老是不成功!源程序如下:
_Application m_excelApp; 
Workbooks m_workbooks; 
_Workbook m_workbook; 
Sheets m_workSheets; 
_Worksheet m_workSheet; 
Range m_cells; 
CString m_st_sheetName="";
int m_i_workbookNum=0;//多少个workbook,难道一个EXCEL还有多个workbook?????????????
int m_i_workSheetNum=0;//多少个worksheet,一个workbook有多个worksheet int m_i_workbookIndex=0;
int m_i_sheetIndex=0;
int m_i_columnIndex=0;//列下标
int m_i_rowIndex=0;//行下标
int m_i_nullColumn=0;//连续空的列
int m_i_nullRow=0;//连续空的行
int m_i_validField=0; CString m_st_unformatedItemData="";//不合格的格数据,等待利用_TEXT()转化
CString m_st_itemData="";//格数据
_variant_t m_st_itemVariantStr;
BSTR    m_st_itemStr; int m_i_totalNum=0;
int m_i_validNum=0; try{
//创建Excel 2000服务器(启动Excel) 
if (!m_excelApp.CreateDispatch("Excel.Application",NULL)) 

return FALSE;
}  //把WorkBook与m_excelApp关联起来
m_workbooks.AttachDispatch(m_excelApp.GetWorkbooks(),true); 
m_workbooks.Open(p_st_fileName,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing); m_i_workbookNum=m_workbooks.GetCount();
m_workbook.AttachDispatch(m_workbooks.GetApplication());
//得到Worksheets 
m_workSheets.AttachDispatch(m_workbook.GetWorksheets(),true); //得到sheet
m_i_workSheetNum=m_workSheets.GetCount();
for(m_i_sheetIndex=1;m_i_sheetIndex<=m_i_workSheetNum;m_i_sheetIndex++)
{
//得到一个SHEET
m_workSheet.AttachDispatch(m_workSheets.GetItem(_variant_t((long)m_i_sheetIndex)),true);//得到SheetIndex,下标从1开始,等价于下面的字符串
  m_st_sheetName=m_workSheet.GetName();//得到Sheet名称  //得到全部Cells,此时,m_cells是cells的集合
m_cells.AttachDispatch(m_workSheet.GetCells(),true);//得到全部的Cells     .....处理程序
    
  } //释放对象 
m_cells.ReleaseDispatch(); 
m_workSheet.ReleaseDispatch(); 
m_workSheets.ReleaseDispatch(); 
m_workbook.ReleaseDispatch(); 
m_workbooks.ReleaseDispatch(); 
m_workbooks.Close();
m_excelApp.Quit();//退出EXCEL进程,为什么无法顺利退出
m_excelApp.ReleaseDispatch(); 在这里,我调用m_excelApp.Quit();这个程序退出,大部分都无法顺利退出excel进程,为什么,请高手指教!!!!

解决方案 »

  1.   

    Excel97,Excel2002,Excel2002并不唤起(raise)一个能被其他进程注意到的退出事件。只有当一个不在同一个进程内的控制着Excel的一个实例的应用程序(下称控制者)释放所有的对象引用的时候,控制者才知道Excel进程已经结束,于是告知Excel退出。但是,如果一个控制者创建了一个Excel实例并使之可见的时候,因为它并不知道终端用户什么时候关闭了Excel,所以只要控制者还没有释放对象引用的时候,Excel就会保持着装载以及在运行对象表(Running Object Table)中的状态。所以出现了您所说的情况。至于这个问题的解决方法,您可以用查找窗口等方法得到该进程的控制权,然后关闭就可以了。如果您需要了解进一步的信息,您可以参看kb文章http://support.microsoft.com/default.aspx?scid=kb;en-us;Q192348。
      

  2.   

    tryApplication app;
    app.CreateDispatch("Excel.Application");
    app.SetVisible(TRUE);
    ...
    app.SetUserControl(FALSE);
    app.Quit();
      

  3.   

    To laiyiling(【CSDN●】),微软提供的也不行呀,它没有杀死进程,所以在等待信号量时无限期等待.这个也不行呀,另外我不需要显示EXCEL
      Application app;
    app.CreateDispatch("Excel.Application");
    app.SetVisible(TRUE);
    ...
    app.SetUserControl(FALSE);
    app.Quit();
      

  4.   

    看来只有我才能给出正确答案,你看看你的程序有没有调用Range.GetItem()。你把它comment掉试试看会不会退出。如果是问题就解决了,你可以用其他方法来读取sheet里面的cell。
      

  5.   

    这个也不行呀,另外我不需要显示EXCEL
      Application app;
    app.CreateDispatch("Excel.Application");
    app.SetVisible(TRUE);
    ...
    app.SetUserControl(FALSE);
    app.Quit();把app.SetVisible(TRUE);改成app.SetVisible(FALSE);就不显示了