目录
QAxObject
QVariant
1.逐单元格读取表格内容
2.一次性读取工作表使用范围
利用QT的 QAxObject读取Excel表格数据的两种方法比较,完整的QT源码到此下载:ReadExcel.rar-嵌入式文档类资源-CSDN下载
如何利用QT进行读取Excel表格呢?这里介绍的是利用QT自带的的QAxObject接口类,普遍有两种方法。
打开QT帮助搜索QAxObject,得知这是一个继承Inherits:QObject and QAxBase的子类。
The QAxObject class provides a QObject that wraps a COM object.
Header:#include
qmake:QT += axcontainer
Inherits:QObject and QAxBase
头文件需要包含 #include
打开全部成员列表里面有个
querySubObject(const char *, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &, const QVariant &) : QAxObject *
我们就是用querySubObject来操作读取Excel表格内容。两种方法导致读取时间上的长短以及代码优异性。
还有一个必须要知道的类是QVariant,这是一个数据联合体,用来存放读取到的Excel数据。
The QVariant class acts like a union for the most common Qt data types.
Header:#include
qmake:QT += core
简单来说就是一个单元格调用一次querySubObject,逐行逐列逐个读取。
QAxObject *excel = new QAxObject(this);
for (int i=RowStart; iquerySubObject("Cells(Int, Int)", i, j );
}
}
相信看了前面概述内容的聪明的网友一眼就看到了问题,querySubObject明明可以一次读取8个var,而现在一次只读取一个单元格内容,简直就是对资源浪费。此种笨拙的方法,建议直接放弃。
这是用第一种方法读取excel数据,用QTableview构建的表格
这个方法直接就是读取工作表用到的内容。d->sheet是打开Excel的一个sheet。读到的内容存放在QVariant里面。
QAxObject *usedRange = d->sheet->querySubObject("UsedRange");
QVariant var = usedRange->dynamicCall("Value");
强烈建议使用这个方法,建议构建一个数据模型 QList
QList
QList< QList > datas;//构建数据模型用于存储数据
qDebug()<a ;a++ )
{
for (int b=0;datas.at(a).size()>b ;b++ )
{
qDebug() << QString(datas.at(a).at(b).toByteArray()); //打印所有数据
}
}
。这是用第二种方法,用QTablewidget构建的表格