1. 程式人生 > >流行的報表生成工具-JXLS

流行的報表生成工具-JXLS

如果你還在為靈活的生成各種複雜報表犯愁,在為常用報表工具消耗大量記憶體擔心。我推薦一個很好用的開源的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

下面重點介紹下我實現的這個工具,希望能幫助到大家:

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 "[email protected];[email protected]"
        java -jar db_report.jar -q member:會員資訊:"select * from member" -q order_db:訂單資訊:"select * from orders" -o "/tmp/db-report/output/memberOrders.xlsx" -mailto "[email protected]"
 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 "[email protected]"
 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 [email protected]"
 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 "[email protected]"