簡體   English   中英

使用QAxObject兩次無法讀取文件數據

[英]Can't read file data twice using QAxObject

我使用QAxBaseQAxObject讀取了excel文件。

我得到了全局變量QAxObject* db_workbook; 我在excel中存儲指向某些工作簿的指針(不知道為什么這樣調用它,但無論如何)的地方。 我需要它,因為我需要它以幾種功能(不僅是一種)獲得excel文件數據。

readExcelFile方法執行正常時,在test_function()出現異常

在此處輸入圖片說明

出現在此行sheet_N = db_workbook->querySubObject("Worksheets(int)", 1);

為什么會發生以及如何解決?

代碼部分在這里

//
QAxObject* db_workbook;

//for read what we need to
void importdb_module::readExcelFile(QAxObject* excel, QString& file_path){

    if(initExcel(excel)){

        QAxObject* workbooks = excel->querySubObject("WorkBooks");
        workbooks->dynamicCall("Open (const QString&)", file_path);
        QAxObject* workbook = excel->querySubObject("ActiveWorkBook");
        db_workbook = workbook;//global ptr points same adress now
        QAxObject* worksheets = workbook->querySubObject("WorkSheets");

        //test getting sheet num 1 name
        QAxObject* sheet_hh = workbook->querySubObject("Worksheets(int)", 1);

        QString sheet_name = sheet_hh->property("Name").toString();

        qDebug()<<sheet_name<<"TEST!";//here everything works fine
    }
}

void importdb_module::test_function(){
    QAxObject* sheet_N;
    //ERROR IS HERE!
    sheet_N = db_workbook->querySubObject("Worksheets(int)", 1);

    QString sheet_name = sheet_N->property("Name").toString();

    qDebug()<<sheet_name;
}


//executes on button click
void importdb_module::testExlOp(QString &_path){
    QAxObject* excel;
    QStringList spreadsheet_list; //get spreadsheet list when opening file
    QString path = _path;//gonna use GUI choose

    if(initExcel(excel)){
        if (readExcelFile(excel, path)){
            //
            test_function();
            excel->dynamicCall("Quit(void)");
            }else{
            //error output
            QMessageBox::information(0, "", "Error");
        }
    }


    delete excel;
}

謝謝!

可能您有一個懸空的指針。 使用QPointer<QAxObject>代替裸指針。 QAxObject的實例被破壞時,它將自身重置為null。

一般來說,在當今時代,您不應將裸指針用於未隱式擁有的任何事物。 這意味着對於具有父級的QObjects ,您不需要使用智能指針(盡管它不會對任何對象造成傷害)。 一般來說,智能指針不會受到傷害。 使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM