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

juj*_*lbe 3 qt multithreading activex

我正在尝试处理Excel工作表以使用Qt(4.6.3)对其中的数据进行一些处理.我试过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)");
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?有没有更好的方法来完成工作?比ActiveX更好的想法?

谢谢.

编辑: 正如Raiv所说,我换成QAxWidgetQAxObject

只需调用线程的run():

// ...
CoInitialize(0);
QAxObject excel("Excel.Application");
// ...
Run Code Online (Sandbox Code Playgroud)

它工作正常.

Rai*_*aiv 6

尝试QAxObject而不是QAxWidget,它可以在另一个线程中工作.只是不要忘记在那里调用CoInitialize().