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

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 05:07
    关注

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

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

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月31日
  • 创建了问题 3月29日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部