代码如下
if(!AfxOleInit())   
{   
   MessageBox(_T("无法初始化COM的动态连接库"));   
   return;   
}   CString FilePath=FileDlg.GetPathName();
ExcelApp.CreateDispatch(_T("Excel.Application"), NULL);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
ExcelApp.put_Visible(TRUE); Books.AttachDispatch(ExcelApp.get_Workbooks()); LPDISPATCH lpDisp=Books.Open((LPCTSTR)FilePath,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,covOptional,
covOptional,covOptional,covOptional,covOptional,covOptional,covOptional);
Book.AttachDispatch(lpDisp);
Sheets.AttachDispatch(Book.get_Worksheets()); //得到Worksheets 
m_SheetNum=Sheets.get_Count();

VARIANT vtemp;
_bstr_t btemp;
char ctemp[40];
long count; m_pTagPoint=new char *[m_SheetNum];
Num=new long[m_SheetNum];
for(int j=0;j<m_SheetNum;j++)
{
Sheet.AttachDispatch(Sheets.get__Default(VT(j+1))); //得到sheet1
CString cs=Sheet.get_Name();
strcpy(ctemp,(LPSTR)(LPCTSTR)cs); CRange usedRange;
usedRange.AttachDispatch(Sheet.get_UsedRange());
Range.AttachDispatch(usedRange.get_Rows()); Num[j]=Range.get_Count(); Range.AttachDispatch(Sheet.get_Cells()); m_pTagPoint[j]=new char[(Num[j]+1)*40];
memcpy((void *)m_pTagPoint[j],ctemp,40); for(int i=1;i<Num[j];i++)
{
vtemp=Range.get__Default(VT(i),VT(1));
btemp=(_bstr_t)vtemp;
strcpy(m_pTagPoint[j]+40*i,btemp);
}
Range.ReleaseDispatch();
usedRange.ReleaseDispatch();
Sheet.ReleaseDispatch();
}
Sheets.ReleaseDispatch();
Book.ReleaseDispatch();
Book.Close(covOptional,covOptional,covOptional);
Books.ReleaseDispatch();
Books.Close();
ExcelApp.Quit();
ExcelApp.ReleaseDispatch();
着色的这段代码如果隐掉的话就不会有这种情况发生,请各位高手指点一二

解决方案 »

  1.   

    程序一退出,excel进程自然就退出。如果你程序没退出,虽然你调用app.quit,(后面的Release可以不调用,栈变量自行析构),仍然有进程驻留。
      

  2.   

    哦,是的,不过我的程序在执行的过程中可能要多次打开关闭excel程序,如果这样的话我的系统中会驻留很多excel进程,有什么办法能让不结束我的程序的情况下而结束系统中驻留的excel进程呢
      

  3.   

    可以调用API暴力杀掉excel进程。
      

  4.   

    检查你的代码有没有重入的现象,没把握的话用全局变量吧,在initInstance中创建,应该不会出现许多进程了(我也不太确定,只是在我的机器上没问题,office的版本太多了,另外按照com原理应该不会出现许多的进程的,但是office 2007后好像每一个excel工作簿(workbooks)就是一个进程,如果这样应该没关系的)
      

  5.   

    非常感谢redeyerabbit的回复,我试了一下把
    CApplication ExcelApp; //代表Excel服务器
    CWorkbook Book; //一个表
    CWorkbooks Books; //整个服务器里所有的表
    CWorksheet Sheet; //一个表单
    CWorksheets Sheets; //所有的表单
    CRange Range;
    这几个变量改为全局变量但是还是有问题