我试图处理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");
// ...
它工作正常。
答案 0 :(得分:6)
尝试QAxObject而不是QAxWidget,它可以在另一个线程中工作。别忘了在那里打电话给CoInitialize()。