Qt读取excel文件的两种方法

本文介绍如何利用QAxObject和ODBC两种方法在Qt环境中读取Excel文件。通过QAxObject可以调用Excel应用程序实现文件读取,并获取指定范围内的数据;而ODBC则提供了一种直接通过SQL查询的方式读取Excel表格数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.QAxObject

1.在工程文件(pro文件)中加入

CONFIG += qaxcontainer

2.添加头文件

#include <QAxObject>

3.读取文件代码

    QAxObject excel("Excel.Application"); 
    excel.setProperty("Visible", false); //隐藏打开的excel文件界面
    QAxObject *workbooks = excel.querySubObject("WorkBooks"); 
    QAxObject *workbook = workbooks->querySubObject("Open(QString, QVariant)", "文件名"); //打开文件
    QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1); //访问第一个工作表
    QAxObject * usedrange = worksheet->querySubObject("UsedRange");
    QAxObject * rows = usedrange->querySubObject("Rows");
    int intRows = rows->property("Count").toInt(); //行数

    QString Range = "A1:B" +QString::number(intRows);
    QAxObject *allEnvData = worksheet->querySubObject("Range(QString)", Range); //读取范围
    QVariant allEnvDataQVariant = allEnvData->property("Value");
    QVariantList allEnvDataList = allEnvDataQVariant.toList();

    for(int i=0; i< intRows; i++)
    {
        QVariantList allEnvDataList_i =  allEnvDataList[i].toList() ;
        QString data1 = allEnvDataList_i[0].toString(); //第i行第0列的数据
    }
    workbooks->dynamicCall("Close()");
    excel.dynamicCall("Quit()");

二.ODBC

1.在工程文件(pro文件)中加入

QT += sql

2.添加头文件

#include <QSqlDatabase>
#include <QSqlQuery>

3.读取文件代码

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "excelexport");
    if(!db.isValid())
    {
        return;
    }
    QString dsn="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Readonly=TRUE;DBQ="+"文件名"+ ";";
    db.setDatabaseName(dsn);

    if(!db.open())
    {
        return;
    }

    QSqlQuery query(db);
    query.exec("select * from [Sheet1$]");
    while (query.next())
    {
        QString data1 = query.value(0).toString();
    }
    db.close();








Qt框架中,可以使用QSpreadsheetModel和QTableView等组件来处理Excel(.xls或.xlsx)文件的数据。以下是一个简单的步骤来读取Excel数据: 1. **添加依赖**:首先,你需要包含Qt的`QtWidgets`模块,并安装支持读取Excel文件的插件,如`qsqlite`、`libxlsxwriter`或第三方库`QtAwesome`中的`fa-excel`图标(用于文件操作)。 ```cpp #include <QtWidgets> #include <QMessageBox> #include <QFileDialog> #include "QSpreadsheetModel.h" #include <QHeaderView> ``` 2. **打开文件**:通过`QFileDialog`让用户选择Excel文件,然后创建一个`QFile`对象并检查文件是否存在。 ```cpp QString fileName = QFileDialog::getOpenFileName(nullptr, tr("打开Excel文件"), "", tr("Excel Files (*.xls *.xlsx)")); if (fileName.isEmpty()) { QMessageBox::warning(nullptr, tr("错误"), tr("未选择文件")); return; } QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { QMessageBox::critical(nullptr, tr("错误"), tr("无法打开文件: %1").arg(file.errorString())); return; } ``` 3. **创建模型**:使用`QSpreadsheetModel`来加载文件内容。 ```cpp QSpreadsheetModel spreadsheetModel(&file); if (!spreadsheetModel.read(fileName)) { // 如果读取失败,显示错误信息 QMessageBox::critical(nullptr, tr("错误"), tr("无法解析文件: %1").arg(spreadsheetModel.lastError().text())); return; } ``` 4. **绑定到表格视图**:将模型关联到`QTableView`上,设置列标题可见。 ```cpp QTableView tableView; tableView.setModel(&spreadsheetModel); QHeaderView *header = tableView.horizontalHeader(); header->setStretchLastSection(true); // 自动调整最后一列大小 ``` 5. **显示数据**:显示表格视图给用户。 ```cpp tableView.show(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值