我正在尝试使用Qt(4.6.3)处理Excel表格以对其中的数据进行一些处理。
我尝试使用
我首先尝试了在简单方法中使用它,一切都很好,但GUI会冻结一段时间,因此我尝试在不同的
正如有些人所说,不允许在主线程以外的其他线程中使用从
下面是我的部分代码:
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");
// ...
它运行良好。