公司遇到一些tasks,需要将分析完毕的数据结果保存在Excel文件中。陆陆续续参与了这么多tasks后,现简单总结下:
操纵Excel 文件有多种方法,每种方法都有特色,适用于不同场景。
方法1:调用Office com组件:
也就是调用Interop类。此方法适用于desktop已经安装有Windows Office的情况。功能及其强大,windows Office拥有的功能,几乎通过此都能调用。劣势是读写速度最慢。
方法2:使用ODBC技术读写Excel文件
该方法读写速度似乎最快(没有准确的数据对比,只是平时开发时候的感觉体会)。要注意的是Office Excel 2007及以后采用了OpenXml的文件封装格式,一改之前的二进制格式,相应有配套两个ODBC驱动。缺点是准确性差,文档内容如果有不合规范的,会出现内容丢失等异常。该方法最大的问题是如果Excel文件不是极其“标准”(没有公式,没有图等)的话ODBC无法识别sheets。 此时的解决办法是。。。。。。。使用方法1对excel 文件进行预处理,也就是调用InterOP操纵NameManager。define sheet。
方法3:使用MicroSoft退出的Office 大杀器: OpenXml2.5 。该工具顾名思义只适合于Excel2007及以后的格式,囊括了几乎所有的操纵Office文件函数。优点是功能强悍,速度比较快。准确性高,输出的Excel文件一般不会有格式问题,缺点也是由其优点而生,由于功能太多新手上手慢,学习曲线比较陡峭。而且性能优化的可操作余地不是很大。
该方法通常很稳定,不过极偶然条件下会造成格式问题,不能正常写入数据。(很是蛋疼。。。。)也就是在这种情况下促使本人摸索出了方法4.
方法4: 直接xml操纵
这也是本人最近开发和采用的办法,适用于大批量写入数据的情况。原理完全同方法3。优点是将Excel文件当做XML文件来处理,以处理xml文件的方法来处理Excel。需要用到OpenXml也用到到一个工具类:Packaging,使用该类来解压缩Excel文件。
该方式具有很大的灵活性,只要肯花功夫能完全代替openxml(本来就原理相同。。。谔谔)。本人仅仅实现了项目需要的数据批量写入,优点是性能高,写入速度快。空白sheet写入1000行*10列数据测试大概需要30 seconds。性能比openxml有所提高,相信继续优化的话性能还可以提高很多。 缺点是功能简单,需要自己手工开发,刚开始比较麻烦,需要熟悉xml处理。