使用 OLE 操作 Excel ,在多线程下使用报错问题解决

    xiaoxiao2021-04-04  48

     添加 CExcelOLE 类

    在 MFC 中,操作 Excel 表格内容还是比较方便的,直接VS 的工作项目添加类即可。

    大致如下:

    1 工程属性右键 Add Class -> MFC -> MFC Class From TypeLib -->Add

    2 在 Available type libraries: 选择电脑上的 Excel 版本库,然后选择如下的几个类添加到右边框,完成即可在项目内生成一个 CExcelOLE 类。

    改写构造函数

    默认支持的是在主线程内使用,如果在创建的子线程中使用会报错,这便需要在构造 Ole 对象的时候分别设定是否采用多线程模式来初始化了。

    代码如下:

    CExcelOLE::CExcelOLE(BOOL bMultiThreaded) { if (bMultiThreaded){ CoInitializeEx(NULL,COINIT_MULTITHREADED); //可以在多线程中使用COM, 但是可能会导致有些依赖 MFC 的操作异常 }else{ CoInitialize(NULL); } if(!m_app.CreateDispatch(_T("Excel.Application"),NULL))//启动了6个线程 { m_bOleReady = false; } else { m_bOleReady = true; } m_lpDisp = NULL; }

    使用

    在创建的子线程函数内调用:

    CExcelOLE Excel(TRUE);//多线程方式初始化 Excel.OpenExcel(m_strFilePath); Excel.OpenSheet();

    转载请注明原文地址: https://ju.6miu.com/read-666140.html

    最新回复(0)