如何解决非主线程无法调用excel的问题
需要将数据输出保存到Excel文件中,使用了QAxObject,在主线程中获取Excel对象,就可以正常使用,代码如下在:
//获取一个Excel对象
QAxObjectexcel("Excel.Application");
if(excel.isNull())
{
return;
}
但是由于在主线程中创建QAxObject对象并调用的话,会造成界面假死,后来在线程中创建QAxObject并调用,但是却发现Excel根本没有启动,无法正常工作,在网上查了很多信息,发现在使用COM控件时必须进行初始化CoInitializeEx(NULL, COINIT_MULTITHREADED);最后CoUnInitialize()释放COM对象。代码如下:
CoInitializeEx(NULL,COINIT_MULTITHREADED);
//获取一个Excel对象
QAxObjectexcel("Excel.Application");
if(excel.isNull())
{
CoUninitialize();
return;
}
...................................
CoUninitialize();
注意:要使用CoInitializeEx必须在代码开始包含#define _WIN32_DCOM预编译命令