如何解決非主線程無法調用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預編譯命令