Странная ошибка чтения Excel с Qt

В моем проекте я пытаюсь прочитать файл Excel. Однако произошли странные вещи. Когда я открою Excel заметно, он будет работать правильно. Хотя, когда я устанавливаю его невидимым, он не открывает мой файл.

Версия Qt: qt-opensource-windows-x86-msvc2015_64-5.7.0

Версия для Windows: 64-битная Win-10

Информация об ошибках в консоли:

QAxBase: ошибка при вызове члена IDispatch. Open: неизвестная ошибка.

Код для чтения файла 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;

0

Решение

попробуй это:

workbooks->querySubObject("Open(const QString&)",QString(path));
0

Другие решения

я встречаю ту же ситуацию, и когда она невидима, я пытаюсь это:

excel->setProperty("EnableEvents",false);

оно работает.

qt-версия: 4.8.6 window-версия: 10 excel: 2013

0

Понял ! Я думаю, что это ошибка службы 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;

Я не причина, но это работает с небольшим всплеском. Надеюсь, это поможет вам.

-1
По вопросам рекламы [email protected]