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

4
我正在尝试使用Qt(4.6.3)处理Excel表格以对其中的数据进行一些处理。 我尝试使用QAxWidget excel("Excel.Application"),就像这里所示的一样。
我首先尝试了在简单方法中使用它,一切都很好,但GUI会冻结一段时间,因此我尝试在不同的QThread中实现它。
正如有些人所说,不允许在主线程以外的其他线程中使用从QWidget继承的类。 我也尝试了这种方法,但无论如何都会发生运行时错误。
下面是我的部分代码:
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所说,我用QAxObject替换了QAxWidget

只需在线程的run()中调用:

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

它运行良好。

2个回答

6
尝试使用QAxObject代替QAxWidget,这样它就可以在另一个线程中工作。只是不要忘记在那里调用CoInitialize()。

-1
我想要添加更多内容:
void Fn:Example(){
 CoInitialize(0); // function used to initialize COM libraries in a process
 // code etc
 ...
 CoUninitialize(); // function used to release COM resources and end COM usage in a process

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接