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