关于EXCEL进程问题!

husband_ghy 2008-05-11 03:51:03
小弟编写的程序打开两个EXCEL后,把两个关闭了!但是进程里面还有一个EXCEL仍然还存在,要手动关闭。请各位大侠出点主意啊!!!!
...全文
107 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
husband_ghy 2008-05-16
  • 打赏
  • 举报
回复
zgl7903会提示出错:error C2039: 'ReleaseDispatch' : is not a member of '_com_ptr_t<class _com_IIID<struct EXCEL::Range,&struct __s_GUID _GUID_00020400_0000_0000_c000_000000000046> >'!貌似这个类里面没有定义这些函数!
zgl7903 2008-05-16
  • 打赏
  • 举报
回复
退出部分的操作顺序

Excel_App.Quit();

Excel_book.SetSaved(true);
Excel_books.Close();

Excel_range.ReleaseDispatch();
Excel_sheet.ReleaseDispatch();
Excel_sheets.ReleaseDispatch();
Excel_book.ReleaseDispatch();
Excel_books.ReleaseDispatch();
Excel_App.ReleaseDispatch();

buyong 2008-05-16
  • 打赏
  • 举报
回复
EXCEL类是哪里的?
husband_ghy 2008-05-16
  • 打赏
  • 举报
回复
自己 up一下!
请各位高手多出点主意啊~~~
husband_ghy 2008-05-13
  • 打赏
  • 举报
回复
不好意思,这两天地震啊!现在吧程序发上来请高手们指点一下:
void CHfreqListDlg::ProcessExcel(CString &strFileName)
{
//创建Excel对象
EXCEL::_ApplicationPtr pExcelApp = NULL;
EXCEL::WorkbooksPtr pWorkbooks = NULL;
EXCEL::_WorkbookPtr pWorkbook = NULL;
EXCEL::WorksheetsPtr pWorksheets = NULL;
EXCEL::_WorksheetPtr pWorksheet = NULL;
EXCEL::RangePtr pRange = NULL;

HRESULT hResult;
hResult = pExcelApp.CreateInstance("Excel.Application");//.10"); 不指定版本 wtq 06.02.23
if( FAILED( hResult ) )
{
AfxMessageBox("Excel:Can't create application,please check it.");
return;
}
pWorkbooks = pExcelApp->GetWorkbooks();
if( NULL == pWorkbooks )
{
AfxMessageBox("Excel:Get workbooks failed.");
pExcelApp.Release();
return;
}
//进度条显示
//生成数据结构的进度条显示
CCreateProcessDlg* pProgressDlg = new CCreateProcessDlg;
pProgressDlg->Create(IDD_DLG_CREATESTRUCT);
pProgressDlg->CenterWindow();
pProgressDlg->SetTitle("正在处理文件......");
pProgressDlg->ShowWindow(SW_SHOW);

//开始处理数据
UpdateData(true);
//缺省参数
try
{

VARIANT varDefaultOpt;
varDefaultOpt.vt = VT_EMPTY;
VARIANT varDefaultOpt2;
varDefaultOpt2.vt = VT_ERROR;
varDefaultOpt2.scode = DISP_E_PARAMNOTFOUND;

_bstr_t bstrFileName = _bstr_t( strFileName );
//打开已有xls
pWorkbook = pWorkbooks->Open( bstrFileName );
if( NULL == pWorkbook )
{
AfxMessageBox("Excel:Open document failed.");
goto lError;
}
pWorksheets = pWorkbook->GetWorksheets();
if( NULL == pWorksheets )
{
AfxMessageBox("Excel:Get worksheets failed.");
goto lError;
}
//打开使用频率高的无失效率器件信息列表模板
pWorksheet = pWorksheets->Item[(short)1];
if( NULL == pWorksheet )
{
AfxMessageBox("Excel:Get worksheet failed.");
goto lError;
}
int nTotal = m_ctrlHfreqList.GetItemCount();
//输出到Excel
UpdateData(TRUE);
CString strPos = _T("");
CString strVal = _T("");
int nStep = (int)(5000/(nTotal));
for (int i=0;i<nTotal;i++)
{
for (int k=0;k<4;k++)
{
switch(k)
{
case 0:
{
strPos.Format("A%d",i+2);
break;
}
case 1:
{
strPos.Format("B%d",i+2);
break;
}
case 2:
{
strPos.Format("C%d",i+2);
break;
}
case 3:
{
strPos.Format("D%d",i+2);
break;
}
default:{}

}
strVal = m_ctrlHfreqList.GetItemText(i,k);
SetCellInfo(pWorksheet,strPos,strVal);
}
pProgressDlg->m_ctrlProgress.SetPos(i*nStep);

}
pProgressDlg->m_ctrlProgress.SetPos(5000);
hResult = pWorkbook->Save();
if( FAILED( hResult ))
{
goto lError;
TRACE("Save failed.");
}
}
catch (...)
{
TRACE("\n *** Unhandled Errors *** \n");
}
lError:
if( NULL != pWorksheet )
{
pWorksheet.Release();
pWorksheet = NULL;
}
if( NULL != pWorksheets )
{
pWorksheets.Release();
pWorksheets = NULL;
}
if( NULL != pWorkbook )
{
pWorkbook->Close();
pWorkbook.Release();
pWorkbook = NULL;
}

if( NULL != pWorkbooks )
{
pWorkbooks.Release();
pWorkbooks = NULL;
}
if( NULL != pExcelApp )
{
pExcelApp.Release();
pExcelApp = NULL;
}

//删除进度条
delete pProgressDlg;
pProgressDlg = NULL;


}
an_bachelor 2008-05-11
  • 打赏
  • 举报
回复
你是如何關閉的代碼看看 也許你的代碼根據exe名字來判斷 而踫到第一個符合條件的exe執行完畢就返回了

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧