2011-07-14 65 views
3

我正在嘗試處理一個Excel工作表,對Qt中的數據進行一些處理(4.6.3)。 我試過使用QAxWidget excel("Excel.Application")作爲使用here使用Qt進行多線程Excel處理?

我試着先用一個簡單的方法,一切正常,但GUI凍結了一段時間,所以我試圖在不同的QThread中實現它。

正如有人說,不允許在主線程之外的其他線程中使用QWidget的繼承類。 我也試過這個way,但是反正有一個運行時錯誤。

這裏是我的代碼片段:

void MainDialog::extractData() 
{ 
    QAxWidget excel("Excel.Application"); 
    excel.setProperty("Visible", false); 

    QAxObject * workbooks = excel.querySubObject("WorkBooks"); 
    workbooks->dynamicCall("Open (const QString&)", ui->lineEditAdress->text()); 
    QAxObject * workbook = excel.querySubObject("ActiveWorkBook"); 
    QAxObject * worksheet = workbook->querySubObject("Worksheets(int)", 1); 

    // ... some work here... 

    workbook->dynamicCall("Close (Boolean)", false); 
    excel.dynamicCall("Quit (void)"); 
} 

我做錯了嗎?有沒有更好的方式來完成工作?比ActiveX更好的主意?

謝謝。

編輯: 作爲Raiv說,我換成QAxWidget通過QAxObject

只是在線程的run()的調用:

// ... 
CoInitialize(0); 
QAxObject excel("Excel.Application"); 
// ... 

,它工作正常。

回答

6

嘗試QAxObject而不是QAxWidget,它可以在另一個線程中工作。只要不要忘記在那裏調用CoInitialize()。

+0

感謝您的快速反應,它實際上工作。 – jujulebulbe