2011-07-14 30 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