网上各种教程用的方法主要是如下这一句:

QAxObject * range = worksheet->querySubObject("Cells(int,int)", 1, 1 );

  这种方法当然也行,可以一项一项地读,但是当读取数量很大的时候就很慢了,在我的电脑上测试读5000个数据大约168s左右。看资料找到一种批量读取的方法,经测试读10000行的数据才3s多,效果超级棒,充分发挥了QAxobject读取的优势。

  核心代码在于这一句:

QAxObject *range = worksheet->querySubObject("Range(QString)", "B13:C1000");

  用Range(QString)实现选取一大块区域,一次性读一个数组出来当然快啦。

  附上完整的源码供大家交流学习:

  pro中加一句:QT+=axcontainer

  头文件加一个:#include <QAxObject>

  核心代码:

// 批量读取xls到map
int readEnvXlsFile(QString FileName, QMap<QString,float> &map)
{
QAxObject *excel = NULL;
QAxObject *workbooks = NULL;
QAxObject *workbook = NULL;
excel = new QAxObject("Excel.Application");
if (!excel)
{
qDebug() << "EXCEL对象丢失!";
}
excel->dynamicCall("SetVisible(bool)", false);
workbooks = excel->querySubObject("WorkBooks");
workbook = workbooks->querySubObject("Open(QString, QVariant)", FileName);
QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);//打开第一个sheet
QAxObject * usedrange = worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
QAxObject * rows = usedrange->querySubObject("Rows");
QAxObject * columns = usedrange->querySubObject("Columns");
int intRows = rows->property("Count").toInt();
int intCols = columns->property("Count").toInt();
qDebug() << "xls行数:"<<intRows;
qDebug() << "xls列数:"<<intCols; // 批量载入数据,这里默认读取B13:C最后
QString Range = "B13:C" +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-13; i++)
{
QVariantList allEnvDataList_i = allEnvDataList[i].toList() ;
//qDebug()<< allEnvDataList_i[0].toString()<< allEnvDataList_i[1].toFloat();
map.insert(allEnvDataList_i[0].toString(),allEnvDataList_i[1].toFloat());
}
workbooks->dynamicCall("Close()");
return 0;
}

  Update 2017-05-06: 看了一下百度的这一篇已经提到了此方法。

Qt使用QAxObject快速批量读取Excel内容的更多相关文章

  1. POI读取Excel内容格式化

    在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其 ...

  2. C# 读取Excel内容

    一.方法 1.OleD方法实现该功能. 2.本次随笔内容只包含读取Excel内容,并另存为. 二.代码 (1)找到文档代码 OpenFileDialog openFile = new OpenFile ...

  3. Unity用Excel.dll简单读取Excel内容

    Unity用Excel.dll简单读取Excel内容 需要Excel.dll 需要如下三个命名空间 using System.IO; using Excel; using System.Data; 1 ...

  4. EasyExcel 轻松灵活读取Excel内容

    写在前面 Java 后端程序员应该会遇到读取 Excel 信息到 DB 等相关需求,脑海中可能突然间想起 Apache POI 这个技术解决方案,但是当 Excel 的数据量非常大的时候,你也许发现, ...

  5. java poi 读取excel内容

    import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import or ...

  6. 从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)

    今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...

  7. 【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)

    今天做项目遇到需要用phpMyAdmin批量导入Excel内容到MySQL数据库.分析了我的踏坑经历并且总结一最便捷的一套导入数据的方法,非常实用简洁: 1.修改Excel表的数据,使得Excel中的 ...

  8. nodejs读取excel内容批量替换并生成新的html和新excel对照文件

    因为广告投放需要做一批对外投放下载页面,由于没有专门负责填充页面的编辑同学做,只能前端来做了, 拿到excel看了一下,需要生成200多个文件,一下子懵逼了. 这要是来回复制粘贴太low了 正好最新用 ...

  9. JAVA利用jxl读取Excel内容

    JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. import java.io.File; import java.io.FileInp ...

随机推荐

  1. linux zookeeper开机启动

    1.在zkEnv.sh中指定当前用户jdk环境变量 export JAVA_HOME=/usr/local/src/jdk1.7.0_55/ 2.在/etc/rc.d/init.d文件夹下创建zook ...

  2. Linux网络IO模型

    同步和异步,阻塞和非阻塞 同步和异步 关注的是结果消息的通信机制 同步:同步的意思就是调用方需要主动等待结果的返回 异步:异步的意思就是不需要主动等待结果的返回,而是通过其他手段比如,状态通知,回调函 ...

  3. 设计模式3——单例模式Singleton

    参考链接: 单例模式-菜鸟教程:https://www.runoob.com/design-pattern/singleton-pattern.html 这种类型的设计模式属于创建型模式,它提供了一种 ...

  4. JMeter数据库测试计划

    在系统上安装数据库服务器之后. 按着这些次序: 创建名为testdb的数据库. 创建表 - tb_user. 将记录插入到tb_user表中. 下图显示了创建的数据库及其记录. 注意:您需要将相应的J ...

  5. Docker容器Centos容器安装openssh

    前面在部署容器,使用docker容器作为jenkins的Slave节点时,会发现在使用centos作为镜像源拉去容器,不能正常连接,最后是因为centos的sshd的问题 下面专门是centos容器安 ...

  6. python之面向对象中的多态

    直接看代码: class Dog: def __init__(self,name): self.name = name def play(self): print("%s在汪汪汪" ...

  7. redis集群数据迁移txt版

    ./redis-trib.rb create --replicas 1 192.168.112.33:8001 192.168.112.33:8002 192.168.112.33:8003 192. ...

  8. GraphicsLab Project之Diffuse Irradiance Environment Map

    作者:i_dovelemon 日期:2020-01-04 主题:Rendering Equation,Irradiance Environment Map,Spherical Harmonic 引言 ...

  9. sql函数实用——字符函数(sqlserver与mysql对比)

    1.获取长度 sqlserver写法:关键字:len()    获取参数的字符数量 select  Len('aksjdhh')    输出结果 7 select len('张无忌ooo')   输出 ...

  10. ssh免密登陆和加密解密

    一 丶实现无密码的远程管理 1.生成公钥 私钥 [root@room9pc14 桌面]# ssh-keygen [root@room9pc14 桌面]# ls /root/.ssh/ 2.上传公钥到虚 ...