如何解決非主線程無法調用excel的問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章