DC娱乐网

excel 取数优化

最近工作上有新需求,读取excel数据,转行成特定的格式,入库。 根据这个需求,自己首先利用了公司框架的Spire.xl
最近工作上有新需求,读取excel数据,转行成特定的格式,入库。 根据这个需求,自己首先利用了公司框架的Spire.xls组件,开始做业务开发。功能编写完成后,用数据自测。发现有个缺陷,读取数据非常缓慢。 这不得不想办法解决了。首先想到的是,换组件。之前用过ExcelMapper,感觉还行,便更换组件,把业务代码和读取excel的通用代码分离。 excelmapper取数是一次性返回所有结果。可以设置数据开始行,是否包含表头,有公式的单元格,是取数据结果,还是取公式等等,还是挺方便的。 刚开始使用强类型映射,然而,却测出一个缺陷,单元格有无效的公式是,强类型引用会报错,导致不能取到结果,一个单元格,坏了所有数据。 只好另找办法,换成动态类型映射时,是类似字典列表结构返回。可以得到完整数据,自己再根据字典数据进行处理。 渐渐地,加大了数据量,excel文件十几M,几十M,甚至几百M。这个数据量大得能直接报OutOfMenery错误。 不行,再找其他办法。在找资料的过程中,发现了两个高性能读取excel的库,MiniExcel和ExcelDataReader。二选一,选择了MiniExcel。 把关键的取数部分换成了MiniExcel组件后,提交测试。然而好景不长,测出一个缺陷,MiniExcel不支持.xls。这又得换成ExcelDataReader了。 取数换成ExcelDataReader后,发现这个组件对于大数据量有天然的优势,他每次取数都是取一行内容,不会把整个工作簿的数据加载到内存。