._qaxobject头文件">
当前位置:   article > 正文

QT学习一:利用QT QAxObject读取Excel表格数据的两种方法比较_qaxobject头文件

qaxobject头文件

目录

QAxObject

QVariant

1.逐单元格读取表格内容

2.一次性读取工作表使用范围



利用QT的 QAxObject读取Excel表格数据的两种方法比较,完整的QT源码到此下载:ReadExcel.rar-嵌入式文档类资源-CSDN下载

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ltcG9ydF9uZXc=,size_16,color_FFFFFF,t_70

QAxObject

如何利用QT进行读取Excel表格呢?这里介绍的是利用QT自带的的QAxObject接口类,普遍有两种方法。

打开QT帮助搜索QAxObject,得知这是一个继承Inherits:QObject and QAxBase的子类。

  1. The QAxObject class provides a QObject that wraps a COM object.
  2. Header:#include <QAxObject>
  3. qmake:QT += axcontainer
  4. Inherits:QObject and QAxBase


头文件需要包含 #include <QAxObject> ,并且在pro项目文件里面使用QT += core gui axcontainer

打开全部成员列表里面有个

querySubObject(const char *, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &) : QAxObject *

我们就是用querySubObject来操作读取Excel表格内容。两种方法导致读取时间上的长短以及代码优异性。

QVariant

还有一个必须要知道的类是QVariant,这是一个数据联合体,用来存放读取到的Excel数据。

  1. The QVariant class acts like a union for the most common Qt data types.
  2. Header:#include <QVariant>
  3. qmake:QT += core

1.逐单元格读取表格内容

简单来说就是一个单元格调用一次querySubObject,逐行逐列逐个读取。

  1. QAxObject *excel = new QAxObject(this);
  2. for (int i=RowStart; i<RowStart+Row; i++) {
  3. coecol=0;
  4. for (int j = ColStart; j < ColStart + Col; j++)
  5. {
  6. cell = excel->querySubObject("Cells(Int, Int)", i, j );
  7. }
  8. }


相信看了前面概述内容的聪明的网友一眼就看到了问题,querySubObject明明可以一次读取8个var,而现在一次只读取一个单元格内容,简直就是对资源浪费。此种笨拙的方法,建议直接放弃。

这是用第一种方法读取excel数据,用QTableview构建的表格

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ltcG9ydF9uZXc=,size_16,color_FFFFFF,t_70

2.一次性读取工作表使用范围

这个方法直接就是读取工作表用到的内容。d->sheet是打开Excel的一个sheet。读到的内容存放在QVariant里面。

  1. QAxObject *usedRange = d->sheet->querySubObject("UsedRange");
  2. QVariant var = usedRange->dynamicCall("Value");

强烈建议使用这个方法,建议构建一个数据模型 QList<QList<QVariant> >

QList<QList<QVariant> >的原型是QList(const QList<T> &),最外层的QList代表行数组rows,内层的QList代表列数组cols

  1. QList< QList<QVariant> > datas;//构建数据模型用于存储数据
  2. qDebug()<<datas.size(); //表格的总行数
  3. qDebug()<<datas.at(0).size(); //第一行的列数
  4. for (int a=0;datas.size()>a ;a++ )
  5. {
  6. for (int b=0;datas.at(a).size()>b ;b++ )
  7. {
  8. qDebug() << QString(datas.at(a).at(b).toByteArray()); //打印所有数据
  9. }
  10. }

。这是用第二种方法,用QTablewidget构建的表格

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ltcG9ydF9uZXc=,size_16,color_FFFFFF,t_70

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/170572
推荐阅读
相关标签
  

闽ICP备14008679号