Excel:导出数据性能优化

       Excel真是一款功能强大和神奇的软件, 一款很不错的做面应用软件,所以很多应用均有Excel插件,根据业务需求,可以在插件中开发复杂, 功能完备的各种需求!

       如金融软件Wind, iFinD等桌面软件,均有相关的插件应用, 及专业插件软件,如何展示天气预报,实时数据等等,本篇,不详聊插件相关东西,后续章节补全之前欠的日记, 哈哈哈!  只是针对程序对excel相关操作的,如打开,保存, 性能,及遇到问题记录,便于后续加强记忆!

       结合项目遇到问题及解决方案,记录如下:

1, 用户反馈导入excel很少的数据,特别卡,需要近3分钟左右, 尊重事实,不要经验主义, 将用户数据要过来,自己测试。

       结果十几秒就成功了, 莫名其名, 让测试复现,结果测试那里很慢, 采用使用的排除法,一点一滴排查,如下:

      首先,excel版本一样; 其次,文件均一样;第三,电脑环境,针对这点数据,没有什么影响;第四: 不涉及网络开销。

      结合上述,排查最后,确认在插件加载上, 插件加载过程是一个初始化过程,涉及很多后台操作,如加载数据,下载文件等等

      综上排查,最后方案: 在导入数据时,不予加载插件相关事项即可-----禁止加载项的代码主要是修改注册表,会在后续的篇幅详细描述关于excel插件的加载项,这个也是个坑!

       题外话:本身对用户来说,只是导入数据,不涉及界面,当然不应该此时加载相关插件,否则加载慢,退出也慢,所以平时做事时,多想一下,没有错!

  2,类似问题,如导出数据,此时有点差别,主要是站在产品角度考虑,由于导出数据会打开excel,用户可见,即可操作,所以此时如果数据用户不会进而二次操作,则可以不加载插件项,这样完事大吉; 否则必须加载,这种情况下,就要考虑怎么提升性能。

        在加插件的情况下,根据代码分析(数据处理过程还是很快,大量数据就除外),性能主要耗费在初始化com上, 即调用CreateDispatch(),  根据排查和分析,主要方案如下:

   1, 程序只做一次的初始化,但是怎么做到启动每个excel呢? 一个就一个进程, 具体方法如下:

         通过上述的初始化,利用workbook相关函数,然后数据导出,如生产数据,画出图形,这时一个完整的excel生成,此时只是没有显示(或者调用接口将其隐藏, 任务管理器中有excel进程), 关键点来了,通过workbook.SaveAs(很多参数),生产一个“xxx.xls”文件, 此时文件后缀一定是“.xls”,  此处有excel版本兼容性问题,这点也是坑爹!

         然通过ShellExceute(NULL, _T("open"),  xxx.xls, NULL, NULL, SW_SHOW)打开文件,完成一次导出操作,下次早导出是,不需要初始化, 继续使用!

  2, 直接用第三方库生成对应的xml,然后利用excel打开即可, 此时只是生成相关xml文件,不涉及com相关操作,所以性能上很快,  就是要支持全面,如各种属性,图形等等,不过剩下只是完善xml文件即可!

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值