使用Qt进行多线程Excel处理?

时间:2011-07-14 12:35:30

标签: multithreading qt activex

我试图处理Excel工作表,用Qt(4.6.3)对其中的数据进行一些处理。 我尝试使用QAxWidget excel("Excel.Application") here

我首先尝试在一个简单的方法中使用它,一切正常但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");
// ...

它工作正常。

1 个答案:

答案 0 :(得分:6)

尝试QAxObject而不是QAxWidget,它可以在另一个线程中工作。别忘了在那里打电话给CoInitialize()。