日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能碾压 POI !利用模板语法快速生成 Excel 报表

發布時間:2024/3/26 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能碾压 POI !利用模板语法快速生成 Excel 报表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本期講師:劉鵬 GcExcel項目組,核心開發者

Hello,大家好,本期葡萄城技術公開課,將由我來為大家帶來《性能碾壓 POI !利用模板語法快速生成 Excel 報表》的技術分享。

本期課程,我們將借助服務端表格組件GcExcel 的模板語法來完成Excel報表的生成,通過使用簡單的語法標記,可以在不借助任何第三方組件的情況下,結合數據源,自動化地生成Excel模板文件。

目前,GcExcel可以生成的文件格式包括 XLSX、PDF、SSJSON 以及 HTML。在公開課上,我將詳細介紹GcExcel 的模板功能,并教大家如何使用模板生成Excel報表,歡迎大家預約本期公開課,7月10日 下午14:00,期待您的準時收看。

免費預約地址:https://live.vhall.com/120821085

GcExcel 的模板功能簡介

GcExcel 的模板功能是一個高級功能,它提供了一組標記,使用戶可以通過簡單的語法,快速制作出一個Excel模板文件。然后,結合數據源,自動化地生成文件。

要使用這個功能,請前往GcExcel產品官網下載試用最新版本。

工作機制:

  • 首先,我們需要準備一個模板文件(不限于Excel文件,也可以是GcExcel的模板實例)

  • 有了模板文件,我們就可以結合數據源和GcExcel的模板引擎,實現自動化生成模板文件的功能,從而避免了手動輸入大量數據的工作

  • GcExcel 的模板功能工作機制

    代碼示例:

    //重要的4個步驟://1\. 打開模板文件(.xlsx)//2\. 添加并命名數據源//3\. 處理模板,調用接口 IWorkbook.processTemplate()//4\. 保存已處理的文件IWorkbook workbook = new Workbook();workbook.open("template.xlsx"); //打開模板文件workbook.addDataSource("ds", *getData());* //添加并命名數據源workbook.processTemplate(); //處理模板workbook.save("result.xlsx");//導出處理后的文件

    模板樣例:

    · Tablix報告:該模板主要用于設計復雜表頭樣式,如行和列標題中存在多行、表頭中存在小計行等。

    · 員工缺勤計劃:該模板使用了條件格式,它通過一個工作表名稱,在單獨的工作表中顯示每個月的數據。

    · 商品詳情:該模板使用了模板屬性 “image=true”,即在模板處理后把圖片字段的數據顯示為圖片。

    注意:上述模板的展示效果并非 GcExcel 的功能,而是借助了 SpreadJS 純前端表格控件進行可視化展示。

    使用模板生成Excel的基本概念和步驟詳解

    通過上一節,相信大家已經對GcExcel 的模板功能有了一定的認識,下面我會詳細介紹如何使用模板來生成Excel報表。

    基本語法:

  • GcExcel中模板的定義:
  • · 使用 {{ 和 }} 作為標記符,用以定義模板。

    · 在這兩個標記符之間,用戶可以定義數據字段、函數、表達式等。

    · GcExcel提供了豐富的屬性,用以配置并更改默認行為。

  • 模板的用法:
  • · 可以以字符串的形式,設置在Excel單元格中。

    · 目前,一個單元格只能使用一個模板。

  • 代碼示例:
  • {{ds.name}} {{ds.students.name}}{{=sum(ds.score)}}{{=ds.count*ds.price}}
  • 模板屬性
  • · 定義:在GcExcel的模板中,可以用鍵值對的形式配置屬性。

    · 用法:{{模板(屬性名1=屬性值1, 屬性名2=屬性值2, …)}}

    在模板尾部,使用一對圓括號作為標記, 可以在其中配置各種屬性。

    屬性用等于號(=)作為分隔符,以鍵值對的形式定義。多個屬性之間用逗號分隔。

    · 示例:{{ds.name(Context=D5, Group=list)}}

    GcExcel的模板屬性過多,在本期公開課上就不一一講解了,感興趣的同學可以前往 GcExcel 產品官網的學習指南中了解更多。

    GcExcel提供了非常豐富的模板類型,可以滿足不同場景下的業務需要,常用的模板類型包括:數據模板、函數模板、表達式模板、公式模板、工作表模板和內聯模板。

    模板類型:

    數據模板:用來從數據源提取純數據的模板類型。

    · 用法:在模板標記符內,使用圓點(.)作為名稱分隔符,指示數據訪問路徑:{{數據源名稱.字段名}}

    · 示例:{{ds.name}}

    其中,ds 為數據源名稱,是用戶通過代碼設置數據源時指定的; name 為數據庫字段名,或自定義代碼對象的屬性名;

    數據模板示例

    函數模板:該模板內置了10種統計函數:Sum, Count, Average, Max, Min, Product, StdDev, StdDevp, Var, Varp

    · 用法:在模板標記符內,以單個等號(=)開頭。參數名為數據模板,或者數據模板在表格中的位置名稱。目前,這些函數只支持單個參數,也就是說,只能對單個數據字段進行統計。如:{{=函數名(參數名)}}

    · 示例:

    {{=Sum(ds.score)}} 對數據ds.score進行求和;

    {{=Sum(A6)}} 對表格中A6單元格里的數據模板進行求和

    函數模板示例

    表達式模板:該模板支持以下操作符組成的四則運算表達式:’+’, ‘-’, ‘*’, ‘/’ 和 ‘()’

    · 用法:在模板標記符內,以單個等于號(=)開頭。表達式由操作符、數據字段、位置名稱組成。如:{{=表達式}}

    · 示例:

    {{=ds.count*ds.price}}

    {{=A18+D18-G18}}

    {{=(A18+A20)*0.3}}

    表達式模板示例

    公式模板:該模板經過 GcExcel的處理后,對應單元格直接生成Excel公式,而不只是數值。

    · 用法:在模板標記符內,以兩個等于號(==)開頭。經公式模板處理后,公式中的單元格引用,也會根據最終結果進行調整。可以支持任意Excel公式。如:{{==Excel公式}}

    · 示例:{{==SUM(C15, D15)}}

    公式模板示例

    工作表模板:在Excel工作表的表名中,使用模板。

    · **用法:**與數據模板相同。經模板處理后,GcExcel將根據工作表模板對應的用戶數據,為每條數據生成獨立的Excel工作表。并且,每個工作表中僅展示與當前表名數據對應的內容。

    工作表模板示例

    內聯模板:在單元格內容中使用的模板,叫作內聯模板。

    · 用法:你好, {{ds.name}} !通過內聯模板,可以把模板嵌入到單元格的內容中,自定義展示結果。目前,一個單元格只能嵌入一個模板類型。

    · 示例:銷售總額:{{=SUM(C15)}} 萬元

    基礎概念:

    這部分主要會講解制作模板文件時需要注意的一些重要概念,如單元格擴展、上下文和區域上下文。

    單元格擴展:一個模板單元格,在處理完成后,會擴展為多個單元格。

    · 擴展方向: 可以使用屬性 E(extension)來為模板配置擴展方向,例如:{{ds.name(E=H)}}

    · 擴展方向分為:

    • 垂直擴展:從上到下擴展,記作 V(vertical);

    • 水平擴展:從左到右擴展,記作 H(horizontal);

    · 注意:一個模板只能有一種擴展方向,默認為垂直擴展。

    · 單元格擴展示例:

    上下文:一個模板在數據處理過程中,所要參考的對象,我們稱之為它的上下文.就像在語文閱讀理解中,要確定一個詞語的具體含義,需要參考它所處位置前后語句一樣。在模板文件中,兩個相鄰模板單元格之間,會默認形成一種分組與過濾的關系,我們稱之為模板之間的上下文關系(Context)。當前模板單元格在處理后的最終結果,需要參考它所屬的上下文模板來決定。

    · 上下文單元格:一個模板單元格,作為其他模板的上下文時,被稱為上下文單元格。一個上下文單元格,根據其擴展方向的不同,又被稱為水平上下文和垂直上下文。

    o 水平上下文單元格,通常位于其他單元格的上邊;

    o 垂直上下文單元格,通常位于其他單元格的左邊;

    o 一個模板最多可以擁有一個水平上下文和一個垂直上下文。

    · 上下文單元格示例:

    o A2模板受其水平上下文模板A1的影響,在水平方向進行了分組。

    o A2模板的數據,則在各組內,默認按照垂直方向擴展顯示。

    · 默認上下文:由GcExcel模板引擎自動識別各個模板之間的上下文關系。

    o 識別規則:相鄰的左邊單元格為模板單元格并且擴展類型(Expansion)是Vertical,則選中作為當前單元格的上下文節點;相鄰的上邊單元格為模板單元格并且擴展類型(Expansion)是Horizontal,則選中作為當前單元格的上下文節點;非相鄰模板之間不產生默認上下文關系。如果有需要,用戶必須通過Context屬性顯式指定。

    o 條件:位置和擴展類型兩個條件,缺一不可。

    o 示例:

    · 上下文屬性:可以通過屬性 C(context) 來主動指定一個模板的上下文,常見的有以下幾種設置方式:

    • 無:(C=None)。即沒有上下文,當前模板獨立擴展。

    • 默認:用戶不指定上下文屬性, 由模板引擎自動識別上下文。

    • 自定義: 用戶主動指定當前模板的上下文,可以是數據字段或單元格位置。

    · 示例:

    • 一個上下文: (C=A15) (C=ds.Team)

    • 兩個上下文: (C=A3*B2) (C=ds.Team*ds.City)

    • 兩個上下文之間需要用星號(*)分隔。

    • 目前不支持兩個以上的上下文。

    區域上下文:有些場景下,存在大量模板的上下文是相同的情況,此時通過Context屬性逐個設置,會非常繁瑣。因此,GcExcel推出了區域上下文的功能,可以使用 R(range) 屬性,為一個模板單元格設置一個區域值,該模板稱為區域上下文模板。如:{{ds.Team(R=A5:G10)}}

    在該區域內,所有單元格都會被視作模板。并且,區域內任何的一個模板如果既沒有顯式設置上下文,又無法找到默認上下文,則它會使用區域上下文作為其上下文模板。

    · 區域值:由冒號(:)分隔的兩個單元格所形成的矩形區域。(下圖中的所有元素:數據、樣式等都應該以人員名稱作為上下文。)

    樣式設置:

    · 單元格樣式:模板的樣式可以通過Excel的單元格樣式系統進行設置,樣式可以作用到相應模板的每一條數據上。

    · 示例:

    模板數據源:

    代碼示例:

    //步驟://1\. 打開模板文件(.xlsx)//2\. 添加并命名數據源//3\. 處理模板,調用接口 IWorkbook.processTemplate()//4\. 保存已處理的文件IWorkbook workbook = new Workbook();workbook.open("template.xlsx"); //打開模板文件workbook.addDataSource("ds", *getData());* //添加并命名數據源workbook.processTemplate(); //處理模板workbook.save("result.xlsx");//導出處理后的文件

    自定義對象: 用戶通過代碼,定義和創建的數據對象。把對象添加為數據源后,可以將相應的屬性名,作為數據模板的名稱來使用。如: ds.name

    對于嵌套對象,可以用點號(.)組成一個鏈式訪問路徑。如:ds.student.father.name

  • 自定義對象
  • public?class?SalesData{public?List<SalesRecord>?sales;}public?class?SalesRecord{public?String?area;public?String?city;public?String?category;public?String?name;public?double?revenue;}
  • 數據源配置
  • SalesData?datasource?=?new?SalesData();… //設置數據… //設置數據//添加數據源workbook.addDataSource("ds",?datasource);
  • 數據源使用
  • {{ds.sales.category}} {{ds.sales.name}}{{ds.sales.revenue}}

    變量:用戶通過代碼定義的變量,可作為單獨的數據源,添加至模板中。

    · 示例代碼:

    //定義變量String?className?=?"一年級三班";int [] records=new int[30];List<String> students = new ArrayList<String>();//添加數據源workbook.addDataSource("className",?className);workbook.addDataSource("records",? records);workbook.addDataSource("students",? students);//引用{{className}}{{records}}

    數據庫對象:

    GcExcel支持將數據庫的結果集,作為數據源使用:

    • Java語言,支持的是 java.sql.ResultSet;

    • .Net語言,支持的是 DataTable;

    注意:用戶需要自己建立數據庫鏈接,并將數據讀取至對應的結果集,然后作為數據源,添加到模板中。

    數據庫表中的字段名,即列名,可以作為數據模板的字段名稱。

    · 示例代碼:

    //獲取數據庫結果java.sql.ResultSet?datasource?=?new?GcMockResultSet(…);//添加數據源workbook.addDataSource("ds",? datasource);//引用{{ds.Category}}{{ds.City}}

    JSON文件:

    用戶可以使用JSON文件作為數據源。在此之前,用戶需要把JSON文件讀取并序列化成自定義對象,而后作為數據源使用。事實上,任何可以序列化的數據,都可以用這種方式,轉換成模板數據源。如:XML文件,csv文件等。

    · 示例代碼:

    //從JSON文件獲取數據InputStreamReader?reader?=?new?InputStreamReader(this.getResourceStream("Template_FamilyInfo.json"));Gson?gson?=?new?Gson();//數據序列化StudentInfos?datasource?=?gson.fromJson(reader,?StudentInfos.class);//添加數據源workbook.addDataSource("ds",?datasource);

    經典模板展示

    結果文件:

    左表頭:

    上表頭:

    數據區域:

    統計項目:

    除了上述模板,GcExcel還支持更多模板類型:如圖片、圖表、迷你圖、條件格式等,可以幫助大家制作非常漂亮且內容豐富的統計表、帳目表和個人簡歷。

    更多精彩內容,歡迎前往我的公開課了解,7月10日 下午14:00,期待與大家不見不散。

    免費預約地址:https://live.vhall.com/120821085

    關于服務端表格組件 GcExcel

    GrapeCity Documents for Excel (簡稱:GcExcel)是一款基于 Java 平臺的服務端高性能表格組件,可與?純前端表格控件 SpreadJS?前后端兼容,無需依賴 Office、POI 或第三方應用軟件,在前端展示電子表格數據,在服務端批量創建、加載、編輯、打印、導入/導出 Excel 文檔,為您開發的應用程序提供在線文檔的前后端數據同步、在線填報與服務端批量導出與打印,以及類 Excel 報表模板設計與服務端高性能處理等一整套?類 Excel 全棧解決方案。

    總結

    以上是生活随笔為你收集整理的性能碾压 POI !利用模板语法快速生成 Excel 报表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。