C++ 使用Qt读取excel时出现的一个奇怪错误

C++ 使用Qt读取excel时出现的一个奇怪错误,c++,excel-2013,qt5.7,C++,Excel 2013,Qt5.7,在我的项目中,我试图读取excel文件。然而,奇怪的事情发生了。当我以可视方式打开excel时,它将正确执行。当我将其设置为不可见时,它将不会打开我的文件 Qt版本:Qt-opensource-windows-x86-msvc2015_64-5.7.0 Windows版本:64位win-10 控制台中的错误信息: QAxBase:调用IDispatch成员打开时出错:未知错误 读取Excel文件的代码: QAxObject *excel = NULL; QAxObject *workbooks

在我的项目中,我试图读取excel文件。然而,奇怪的事情发生了。当我以可视方式打开excel时,它将正确执行。当我将其设置为不可见时,它将不会打开我的文件

Qt版本:Qt-opensource-windows-x86-msvc2015_64-5.7.0

Windows版本:64位win-10

控制台中的错误信息:

QAxBase:调用IDispatch成员打开时出错:未知错误

读取Excel文件的代码:

QAxObject *excel = NULL;
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL;
excel = new QAxObject("Excel.Application");
excel->dynamicCall("SetVisible(bool)", false);
    // The code to set invisible, project will work correctly when set visible true
workbooks = excel->querySubObject("WorkBooks");
if(!workbooks){
    QMessageBox msgBox;
            msgBox.setWindowTitle("error information");
            msgBox.setText("workbooks error");
            msgBox.exec();
    return;
}
workbook = workbooks->querySubObject("Open(const QString&, QVariant)", file->filePath, 0);
    //This code will not execute correctly, causing "workbook error"
if(!workbook){
    QMessageBox msgBox;
            msgBox.setWindowTitle("error information");
            msgBox.setText("workbook error");
            msgBox.exec();
    return;
}

QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);

QAxObject * usedrange = worksheet->querySubObject("UsedRange");
QAxObject * rows = usedrange->querySubObject("Rows");
QAxObject * columns = usedrange->querySubObject("Columns");

int intRowStart = usedrange->property("Row").toInt();
int intColStart = usedrange->property("Column").toInt();
int intCols = columns->property("Count").toInt();
int intRows = rows->property("Count").toInt();

workbook->dynamicCall("Close (Boolean)", false);
delete excel;
试试这个:

workbooks->querySubObject("Open(const QString&)",QString(path));
excel->setProperty("EnableEvents",false);

明白了!我认为这是Excel服务的错误

Just change your code :
excel->dynamicCall("SetVisible(bool)", **true**); 
And add another: 
excel->dynamicCall("SetVisible(bool)", **false**),
after workbooks = excel->querySubObject("WorkBooks");
work on Qt5.6 excel 2013;

我不知道是什么原因,但它有点溅起水花。希望它能帮助您。

我遇到同样的情况,当它看不见时,我尝试以下方法:

excel->setProperty("EnableEvents",false);
它起作用了


qt版本:4.8.6窗口版本:10 excel:2013

虽然欢迎使用此代码片段,并可能提供一些帮助,但它将说明如何以及为什么解决此问题。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。