Qt5对Excel表格简单、高效处理方法

由于经常用Qt对Excel中的一些数据进行处理,最终综合出一套简单好用的读、写数据方案。
主要代码如下(完整测试项目地址见本文最下方):

bool ExcelManger::Test(QString &path)
{
    QAxObject *excel = NULL;    //本例中,excel设定为Excel文件的操作对象
    QAxObject *workbooks = NULL;
    QAxObject *workbook = NULL;  //Excel操作对象
    excel = new QAxObject("Excel.Application");
    excel->dynamicCall("SetVisible(bool)", true); //true 表示操作文件时可见,false表示为不可见
    workbooks = excel->querySubObject("WorkBooks");


    //————————————————按文件路径打开文件————————————————————
    workbook = workbooks->querySubObject("Open(QString&)", path);
    // 获取打开的excel文件中所有的工作sheet
    QAxObject * worksheets = workbook->querySubObject("WorkSheets");


    //—————————————————Excel文件中表的个数:——————————————————
    int iWorkSheet = worksheets->property("Count").toInt();
    qDebug() << QString("Excel文件中表的个数: %1").arg(QString::number(iWorkSheet));


    // ————————————————获取第n个工作表 querySubObject("Item(int)", n);——————————
    QAxObject * worksheet = worksheets->querySubObject("Item(int)", 1);//本例获取第一个,最后参数填1


    //—————————获取该sheet的数据范围(可以理解为有数据的矩形区域)————
    QAxObject * usedrange = worksheet->querySubObject("UsedRange");

    //———————————————————获取行数———————————————
    QAxObject * rows = usedrange->querySubObject("Rows");
    int iRows = rows->property("Count").toInt();
    qDebug() << QString("行数为: %1").arg(QString::number(iRows));

    //————————————获取列数—————————
    QAxObject * columns = usedrange->querySubObject("Columns");
    int iColumns = columns->property("Count").toInt();
    qDebug() << QString("列数为: %1").arg(QString::number(iColumns));

    //————————数据的起始行———
    int iStartRow = rows->property("Row").toInt();
    qDebug() << QString("起始行为: %1").arg(QString::number(iStartRow));

    //————————数据的起始列————————————
    int iColumn = columns->property("Column").toInt();
    qDebug() << QString("起始列为: %1").arg(QString::number(iColumn));


    //——————————————读出数据—————————————
    //获取第i行第j列的数据
    //假如是第6行,第6列 对应表中F列6行,即F6
    QAxObject *range1 = worksheet->querySubObject("Range(QString)", "F6:F6");
    QString strRow6Col6 = "";
    strRow6Col6 = range1->property("Value").toString();
    qDebug() << "第6行,第6列的数据为:" + strRow6Col6;

    //列的转换函数如下地址,第6列转为F列,第29列转为AC列
    http://blog.csdn.net/y396397735/article/details/78312124


    //—————————————写入数据—————————————
    //获取F6的位置
    QAxObject *range2 = worksheet->querySubObject("Range(QString)", "F6:F6");
    //写入数据, 第6行,第6列
    range2->setProperty("Value", "中共十九大");
    QString newStr = "";
    newStr = range2->property("Value").toString();
    qDebug() << "写入数据后,第6行,第6列的数据为:" + newStr;

    //!!!!!!!一定要记得close,不然系统进程里会出现n个EXCEL.EXE进程
    workbook->dynamicCall("Save()");
    workbook->dynamicCall("Close()");
    excel->dynamicCall("Quit()");
    if (excel)
    {
        delete excel;
        excel = NULL;
    }

    return true;
}

根据自己的操作实践结果:
处理前:
处理前
处理后:
这里写图片描述

应用程序输出:

"Excel文件中表的个数: 3"
"行数为: 9"
"列数为: 5"
"起始行为: 5"
"起始列为: 2"
"第6行,第6列的数据为:66666"
"写入数据后,第6行,第6列的数据为:中共十九大"

完整项目、测试文件路径地址:
https://github.com/lesliefish/Qt/tree/master/QtExcel

  • 14
    点赞
  • 209
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
Qt Designer中,可以通过以下步骤可视化绑定Excel数据到TableWidget: 1. 打开Qt Designer并创建一个新的窗口小部件。 2. 在窗口上拖动并放置一个TableWidget控件。 3. 右键单击TableWidget控件,然后选择"编辑对象"以打开属性编辑器。 4. 在属性编辑器中,找到"objectName"属性,并为TableWidget控件命名(例如,命名为"tableWidget")。 5. 关闭属性编辑器。 6. 在Qt Designer中,单击"文件",然后选择"打开"以打开一个新的.ui文件。 7. 在.ui文件中,插入一个QAxWidget控件(可在Widget部分找到)。 8. 右键单击QAxWidget控件,然后选择"编辑对象..."以打开属性编辑器。 9. 在属性编辑器中,找到"clsid"属性,并将其设置为"Excel.Application"。 10. 继续在属性编辑器中,将"dynamicCall"属性设置为"true"。 11. 在后续步骤之前将属性编辑器关闭。 12. 在.ui文件中,插入一个QPushButton控件(可在Widget部分找到)。 13. 右键单击QPushButton控件并选择"编辑对象"以打开属性编辑器。 14. 在属性编辑器中,找到"text"属性,并将其设置为"导入Excel数据"或类似的文本。 15. 继续在属性编辑器中,找到"clicked"属性,然后单击其旁边的"编辑"按钮。 16. 在弹出的信号槽编辑器中,选择"tableWidget"并单击"添加信号"按钮。 17. 在选中的TableWidget信号下,选择"activated"信号。 18. 单击"确定"按钮关闭信号槽编辑器。 19. 保存并关闭.ui文件。 20. 打开main.cpp文件并写入以下代码: ```c++ #include <QApplication> #include <QAxObject> #include <QTableWidget> #include <QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建Excel对象 QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); // 打开Excel文件 QAxObject *workbooks = excel.querySubObject("Workbooks"); QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "your_excel_file_path"); QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1); // 获取Excel数据 QAxObject *usedrange = worksheet->querySubObject("UsedRange"); QAxObject *rows = usedrange->querySubObject("Rows"); QAxObject *columns = usedrange->querySubObject("Columns"); int rowCount = rows->property("Count").toInt(); int columnCount = columns->property("Count").toInt(); // 在TableWidget中显示Excel数据 QTableWidget tableWidget; tableWidget.setRowCount(rowCount); tableWidget.setColumnCount(columnCount); for (int i = 1; i <= rowCount; i++) { for (int j = 1; j <= columnCount; j++) { QAxObject *cell = worksheet->querySubObject("Cells(int, int)", i, j); QString value = cell->property("Value").toString(); tableWidget.setItem(i - 1, j - 1, new QTableWidgetItem(value)); } } tableWidget.show(); return a.exec(); } ``` 21. 替换代码中的"your_excel_file_path"为您要绑定的Excel文件的路径。 22. 编译和运行项目。 23. 单击"导入Excel数据"按钮,将Excel数据显示在TableWidget中。 通过以上步骤,您就能够将Excel数据可视化地绑定到TableWidget控件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值