2016-11-16 9 views
0

In meinem Projekt versuche ich eine Excel-Datei zu lesen. Aber seltsame Dinge sind passiert. Wenn ich Excel sichtbar öffne, wird es korrekt ausgeführt. Wenn ich es unsichtbar mache, wird es meine Datei nicht öffnen.Eine seltsame Lesung Excel-Fehler mit Qt

Qt Version: qt-Open-Source-windows-x86-msvc2015_64-5.7.0

Windows-Version: 64-Bit-Win-10

Fehlerinformationen in Console:

QAxBase: Fehler IDispatch Mitglied Open Aufruf:

Der Code Unbekannter Fehler Excel-Datei zu lesen:

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; 

Antwort

0

versuchen Sie dies:

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

Während dieses Code-Snippet willkommen ist und einige Hilfe bieten kann, wäre es [stark verbessert, wenn es eine Erklärung enthielt] (// meta.stackexchange.com/q/114762) von * wie * und * warum * dies löst das Problem. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

-1

Verstanden! Ich denke, das ist Excel Service Bug.

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; 

Ich habe nicht den Grund, aber es funktioniert mit ein wenig Splash. Ich hoffe, es könnte dir helfen.