日常工作中可能经常会涉及到用java开发报表,需求比较多的就是表格类的报表导出,单元格合并,图表的展现。具体怎么实现,分表格和图表两类来说。
1、表格类
通常采用的方式是“Java+POI+Excel模板”来制作简单的报表,生成Excel。
其实Java中实现Excel根据模板导出数据的方法有很多,一般简单的可以通过操作pol进行。还可以使用一些工具很轻松的实现模板导出,这些工具现在还在维护,而且做得比较好的国内的有easypoi,国外的就是jxls了。
如果是要用java开发报表模块和功能,其实可以着重利用jxls框架。
我用jxls也有半年时间了,半年前因项目原因需要导出大量的excel文件,所以找到了jxls,基本可以完全满足所有的项目需要。不使用easypoi的原因是那时候测试时候效果不是很好,项目中有很多复杂的报表(大量单元格合并和单元格样式),easypoi处理合并单元格时候容易出现残损的情况。
而且pol、jxl代码工作量大,编码效率很低且不方便维护。Jxls的话相对简单轻量,使用特定的标记在excel模板文件中来定义输出格式和布局。
jxls是通过预制excel模板,然后通过jxls响应API将我们应用程序的数据结合模板格式输出到相应的excel文件中,从而形成报表。
报表的其他需求还有很多,比如前端查询,相关的组件很多,原理无非就是选择你所关注的信息(数据列),选择时间等(查询条件)生成数据集,然后在servlet中将数据集转成报表组件所需要的格式,传送到前台渲染。
2、图表类
涉及到报表的图表开发,就是饼图、柱状图那些,可以用echarts还有highchart。
这里要注意,如果是做web端的图表,不要使用java层的组件,使用js层的组件,因为java层的组件生成的是图片,而js是生成的web代码,如果有交互性的功能和动态功能,java层的组件是难以实现的,同时在java层构造图片也是比较严重消耗服务器性能的。
推荐使用js层图表组件库,常用的有echarts和国外的知名组件highchart,因为是js组件库,服务端只用推送数据到客户端,有js来绘制图层,因此不需要写文件下载的模块。
这里总结一些报表开发常用的开源组件库吧:
图表前端
后面我就不用java开发报表了,因为报表需求量大,以往的大量报表还要维护,然后还有各种复杂的表格形式难以捉摸容易出bug,所以后面就直接用专业的报表工具。
像报表导出,图表制作,开发少说2天,如果用报表工具基本上分分钟的事。哎,能有现成工具真的不要花时间和人力去开发应用来解决问题。
报表工具github是哪个有开源的,之前我们用过jaspereport一阵,好处就不多说了,网上一搜一大把。但是打印报表、复杂的数据计算有点鸡肋,加之我们要和很多应用系统做集成,报表工具要成为一个数据中台的角色,来集中开发个业务的报表,后面还是采购了FineReport。
我也算是亲身经历过从“开发——开源——商用报表工具”的人了。
Java开发报表工具——FineReport
如果有报表开发需求,没有开发能力,但有预算,采购工具是常用的手段,而且一步到位。工具的成本不比人力低?我们以前一个报表开发团队:4个程序员+6个excel做表。报表项目落地后,直接减半,当然工作量也更大了。
FineReport的话,简单介绍一下吧。
功能比较丰富,除了基础的数据展现、填报功能外,还支持定时推送,多级上报,打印导出,移动端,大屏展现等各种场景,俨然是个系统了。
学习成本低,只要学会简单的sql就可以开发,我当年java开发报表的技能早还给百度了。
开发速度快,可视化SQL取数,报表页面设计类似Excel、参数查询可批量查询并导出报表。
填报功能是用的很多的,因为业务上要采集很多数据,开发填报模板后数据直接入库,而是每天邮箱里躺着几十份Excel文件。
以前一张报表我们排需求再制作基本要一周,用FineReport的话,只要配置好数据,1、2个小时。在做项目的时候,可以把一些共性需求的报表做在一个模板里,利用参数查询,批量导出。这种维护的成本也是很低的。
如果要做开发,FineReport也是有接口的,可以根据需求调用相应的接口,用java开发集成定制,或者用js,但和市面上大部分ERP、OA、CRM系统都有了直接的集成。
最后,附一张我最近在做的大屏项目作品吧。