Qt使用ODBC方式讀取Excel文件

1.概述

在Qt編程中,讀取Excel文件的方式有好幾種,這裏介紹使用Qt的sql數據庫模塊在Windows下使用ODBC(ODBC百科概述)的方式讀取Excel內容。

使用Qt通過數據庫的方式連接至ODBC,並以讀取數據庫的方式獲取Excel文件內容。

這種讀取Excel的方式讀取簡單,易於理解,可用於Excel文件的讀取或其它基礎操作。

2.思路

可以將一個Excel文件看作是一個DB數據庫,文件中的每一頁看作是該數據庫中的一張表,每一張表中的第一行是數據庫表字段,其他的都是數據。

3.驅動下載

Qt通過ODBC連接去讀取Excel,需要ODBC支持Excel的讀寫,即需要"20XX Office System驅動程序:數據連接組件"的支持。下載安裝即可。

4.代碼Demo

這裏寫了一個readAll函數,即按行讀取Excel表格內容,輸入fileName文件名、tableName表名(例如:Sheet1),輸出類型爲QList類型的allData,其中的每一個元素QStringList爲一行數據以QString類型讀出並組成一個列表。

函數聲明

/**
 * @brief readAll              [brief]  按行讀取Excel某張表中的所有內容
 * @param fileName             [input]  Excel文件路徑
 * @param tableName            [input]  表名(例如Sheet1)
 * @param allData              [output] 讀出的數據
 * @return                     [return] 成功or失敗
 */
bool readAll(const QString &fileName, const QString &tableName, QList<QStringList> &allData);

因爲這裏要用到Qt Sql數據庫的操作,pro工程文件中添加QT += sql,以及相應的頭文件包含,這裏就不作過多贅述了。

函數實現

bool readAll(const QString &fileName, const QString &tableName, QList<QStringList> &allData)
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "excelexport");
    if (!db.isValid()) {
        qDebug() << "database is not valid!";
        return false;
    }
    QString dsn = QString("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Readonly=TRUE;DBQ=%1;").arg(fileName);
    db.setDatabaseName(dsn);

    if (!db.open()) {
        qDebug() << "database open failed !";
        qDebug() << db.lastError().text();
        return false;
    }
    QSqlQuery query(db);
    query.exec(QString("select * from [%1$]").arg(tableName));
    while (query.next()) {
        QStringList rowData;
        for (int i = 0; i < EXCEL_TABLE_COLUMN; i++) {
            rowData << query.value(i).toString();
        }
        allData << rowData;
    }
    query.clear();
    db.close();

    return true;
}

5.注意事項

當在計算Excel中一張表的行數時,表爲空,計算出的行數count = 0;當僅有一行內容時,計算出的行數count = 1,;當有多行數據時,第一行的內容將作爲表頭,也就是數據庫中的字段行來處理,即實際該Excel表中的行數等於程序讀取出來的有效行數+1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章