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

 添加 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();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值