下面是我创建的Excel类,在打开创建sheet到关闭Excel,最后程序是关闭了,但是在进程中仍然有一个EXCEL进程驻留,搞了好久没找到怎么回事,求高手解答啊。。。
class CMyExcel
{
public:
CMyExcel(void);
virtual ~CMyExcel(VOID);
BOOL Initialization(VOID); //初始化Excel
VOID OpenExcleFile(TCHAR * Filename);//打开Excel文件
VOID CreatSheet(TCHAR * SheetName); //创建一个以参数命令的新页面
VOID SaveFile(VOID); //保存Excel文件
VOID CoUninitialize(VOID); //释放资源(相当重要!),并且退出程序
private:
CString m_cserrormessage; //错误信息
//excel操作对象
Range m_ExlRge;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
_Application m_ExlApp;
Interior m_It;
Excel::Font m_Ft;
CMyExcel(const CMyExcel& myexcel);
CMyExcel & operator =(const CMyExcel& myexcel);
};
CMyExcel::CMyExcel(void)
{
}
CMyExcel::~CMyExcel(void)
{
}
BOOL CMyExcel::Initialization(void)
{
if(!m_ExlApp.CreateDispatch(_T("Excel.Application"),NULL))
{
m_cserrormessage = _T("创建Excel服务失败!");
return FALSE;
}
return TRUE;
}
//打开Excel文件
VOID CMyExcel::OpenExcleFile(TCHAR * Filename)
{
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
LPDISPATCH lpdisp;
m_ExlApp.SetVisible(TRUE);
m_ExlBooks = m_ExlApp.GetWorkbooks();
lpdisp = m_ExlBooks.Open(Filename,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional
);
m_ExlBook.AttachDispatch( lpdisp );
m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面
}
//创建一个以参数命令的新页面
VOID CMyExcel::CreatSheet(TCHAR * SheetName)
{
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);
m_ExlSheet.SetName(SheetName);
}
VOID CMyExcel::SaveFile(VOID)
{
m_ExlBook.SetSaved(TRUE);
m_ExlBook.Save();
}
//释放资源(相当重要!),并且退出程序
VOID CMyExcel::CoUninitialize(VOID)
{
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
m_ExlBook.Close(covOptional,covOptional,covOptional);
m_ExlBooks.Close();
m_ExlRge.ReleaseDispatch();
m_It.ReleaseDispatch();
m_Ft.ReleaseDispatch();
m_ExlSheet.ReleaseDispatch();
m_ExlSheets.ReleaseDispatch();
m_ExlBook.ReleaseDispatch();
m_ExlBooks.ReleaseDispatch();
m_ExlApp.Quit();
m_ExlApp.ReleaseDispatch();
}