感谢经历、 2022-03-29 12:04 采纳率: 67.9%
浏览 453
已结题

qt读取excel的速度优化问题

问题遇到的现象和发生背景

qt使用QAxObject读取excel,以下几步消耗时间过长,第一步1600 ms,第二步3348ms,第三步700ms。如果去掉第二步 excel->dynamicCall,则第三步消耗时间为3900ms。网上分享的快速读取方法大多从读取数据处入手,但是经过测试发现打开excel才是消耗时间最长之处,希望得到一种快速读取的方法。

问题相关代码,请勿粘贴截图
    timer.start();
    QAxObject *excel = new QAxObject("Excel.Application");//excel应用程序
    qDebug()<<"加载excel0"<<timer.elapsed()<<"ms";timer.restart();

    excel->dynamicCall("SetVisible(bool)", false); //true 表示操作文件时可见,false表示为不可见
    qDebug()<<"加载excel1"<<timer.elapsed()<<"ms";timer.restart();

    QAxObject *workbooks = excel->querySubObject("WorkBooks");//所有excel文件
    QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", strSheetName);//按照路径获取文件
    QAxObject * worksheets = workbook->querySubObject("WorkSheets");//获取文件的所有sheet页
    if (workbooks == NULL || worksheets->isNull()){qDebug()<<"打开文件为空";return;}
    qDebug()<<"加载excel2"<<timer.elapsed()<<"ms";timer.restart();
  • 写回答

2条回答 默认 最新

  • 於黾 2022-03-29 13:07
    关注

    你的代码写出来是一行,其实后台处理了大量的数据
    要把文件整个按照二进制先读进内存里
    然后循环处理字节,装进对应的数据结构里
    这个过程就是会慢
    尤其你文件特别大的时候
    而且你直接调用excel的类库,后台其实调用的是office的com组件
    如果你实在觉得com组件慢,你换NPOI试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 创建了问题 3月29日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效