我的博客
  • 解析Excel文件

解析Excel文件

面向财务类需求开发的软件,能够导入导出Excel文件是非常重要的功能。

业界有一个很有名的说法

最好的BI软件就是Excel

业务人员,尤其是财务人员,接触到的数据的主要形式就是Excel文件,他们擅长(也可能只擅长)用表格来处理问题。

像是金蝶,用友这些提供财务软件服务的乙方公司,基本都在使用Java,这个语言虽然在程序员界被认为是古老又笨重的语言, 但是从银行这类大客户的角度审视它,反而会被当成优势。

借助非常丰富的生态,Java处理doc、xls的这类办公用软件格式的文件是手到擒来,其中最流行的工具是Apache的POI,阿里的EasyExcel因为简单易用的API也非常受欢迎。

像是财务报表查询后导出,或者把当前查询的结果(往往是一个分页表格)导出,虽然确实可以引入第三方依赖实现这些需求, 但是由于这些需求确实很直接简单,开发者往往对这些功能掉以轻心, 错误的使用方式往往使得简单的导入导出功能引发了很多生产问题,尤其是内存溢出的问题最为严重。

一个简单的例子,小王的报销单报表有1000万行数据,由于慢SQL的原因,用户点击导出按钮后要等待大约3-5分钟才会有响应下载。 但是着急的用户不会等待这么久,他会刷新页面,再次点击这个按钮。 如果用户锲而不舍地进行这个操作,后台将会有很多线程在缓慢运行,同时这些线程持有的资源——像是内存,CPU的计算资源,还有数据库的连接, 都会在用户的一次次点击中耗尽。

或者是导入功能,在开发这个功能的时候,没什么经验的开发者一般会一次性的将所有的内容都写入内存,如果这个xls文件足够大, 那服务器的内存可能会成为瓶颈。

很多开发者会信奉这样一种观点, 性能问题应该是开发阶段最后才需要考虑的问题。 甚至有些极端的观点认为,在工程协作方面,这根本不是普通开发应该考虑的问题,这应该是技术经理的工作范围。

这点我也是认同的,但是一个功能会把整个进程搞挂掉,开发这个功能的开发者很难把锅甩掉。 一个认真负责的程序员是会对自己的代码负责的,即使是他在使用其他开发者的lib。

Excel使用的文件格式一般为xls和xlsx xls后缀的是2003版Excel使用的标准格式,可以参考

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-oleds/fdc5e702-d09e-4344-a77f-eb079d41f23f

xlsx是微软在2007版推出的文件格式后缀,此类文件的标准协议可以参考

https://ecma-international.org/publications-and-standards/standards/ecma-376/

最近更新: 2026/3/15 14:17
Contributors: Keyang Li