2016-11-16 24 views
0

私のプロジェクトでは、Excelファイルを読み込もうとしています。しかし、奇妙なことが起こった。私がオープンすると目に見えて優れた性能を発揮します。私はそれを非表示に設定しても、私のファイルは開かれません。Qtで奇妙な読み込みエラーが発生する

Qtのバージョン:QT-オープンソースのWindows-x86ベースmsvc2015_64-5.7.0

Windowsのバージョン:コンソールで64ビット勝つ-10

エラー情報:

QAxBase: IDispatchのメンバーオープンの呼び出しエラー:

01:不明なエラー

コードは、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

このコードスニペットは歓迎されていますが、いくつかの助けを与えるかもしれませんが、* how *と* why * thisの[説明があれば大幅に改善されます](// meta.stackexchange.com/q/114762)問題を解決します。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

-1

はそれを手に入れました!私はこれが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; 

私は理由はありませんが、少し飛び散ります。それがあなたを助けることができると願っています

関連する問題