如果你還在為靈活的生成各種復雜報表犯愁,在為常用報表工具消耗大量內存擔心。我推薦一個很好用的開源的Java報表生成工具。
本工具封裝了強大的POI。但與POI不同的是,它可以用很簡潔的代碼生成復查的,各種功能的報表。
官網地址:http://jxls.sourceforge.net/index.html
應用實例Java實現:https://gitee.com/barrywang/jxls-demo
自己基於JXLS實現了一套萬能的報表工具(Scala語言實現,推薦學習,比Java強很多,支持函數式編程):
源碼:
碼雲:https://gitee.com/barrywang/db-report
github:https://github.com/barrywang88/db-report
下面重點介紹下我實現的這個工具,希望能幫助到大家:
1.1 部署目錄結構說明
/tmp/finance/db-report
| db_report.jar --報表工具可運行Jar
+---config
| config.conf --數據庫配置文件
+---logs
| \---db-report
| detail-db-report.2018-06-29.log --工具日志
+---output
| 20180629104146invoice-store.xlsx --報表輸出目錄
\---report
+---runscript --shell啟動工具腳本
| +---inventory-stock
| | genInventoryStockReport.sh
| +---invoice-logistics
| | genInvoiceReport.sh
\---template --報表Excel模板
check_account_template.xls
invoice_line_template.xls
\---scala-script --Scala腳本
getMemberInfo.sc
1.2 啟動參數及說明
-q (-query) <db>:<objectName>:<sql> : 數據庫:對象名:查詢SQL腳本,中間用英文分號“:”隔開, 請避免SQL中使用英文":"。
其中若傳入模板時,對象名代表模板內EL表達式的key值。若不傳入模板,對象名就是生成Excel當前sheet的名稱。
可以傳入多個-q (-query) <db>:<objectName>:<sql>組合, 多個會分別生成報表的多個sheet中。(String)
-s (-script) <scalaScript;paramName:paramValue> : Scala腳本文件, 請返回一個Scala Map[String, AnyRef]。如果scala腳本需要傳入參數, 請腳本后加分號";", 再加參數名:參數值。
Scala腳本請參考:http://ammonite.io/#ScalaScripts。(String)
-t (-template) <template file> : JXLS Excel模板文件絕對路徑, 請參考:http://jxls.sourceforge.net/reference/simple_exporter.html。(File)
-o (-output) <output excel file> : 輸出Excel文件絕對路徑。(File)
-m (-mailto) <email> : 生成報表發送郵箱,多個使用英文分號“;”分割。(String)
-sub (-subject) <subject> : 郵件主題。(String)
1.3 命令舉例
1.3.1 根據SQL生成報表
java -jar db_report.jar -q member:會員信息:"select * from member" -o "/tmp/db-report/output/member.xlsx" -mailto "XXX@qq.com;YYY@qq.com"
java -jar db_report.jar -q member:會員信息:"select * from member" -q order_db:訂單信息:"select * from orders" -o "/tmp/db-report/output/memberOrders.xlsx" -mailto "XXX@qq.com"
1.3.2 根據SQL+模板生成報表
java -jar db_report.jar -q member:members:"select * from member" -t "/tmp/db-report/report/template/member-template.xls" -o "/tmp/db-report/output/member.xlsx" -mailto "XXX@qq.com"
1.3.3 根據Scala腳本+模板生成報表
java -jar db_report.jar -q -s "/tmp/db-report/report/scala-script/getMemberInfo.sc" -t "/tmp/db-report/report/template/member-template.xls" -o "/tmp/db-report/output/member.xlsx" -"mailto XXX@qq.com"
1.3.4 根據SQL+Scala腳本+模板生成報表
java -jar db_report.jar -q -q member:members:"select * from member" -s "/tmp/db-report/report/scala-script/getMemberInfo.sc" -t "/tmp/db-report/report/template/member-template.xls" -o "/tmp/db-report/output/member.xlsx" -mailto "XXX@qq.com"