1. 程式人生 > >開源元件ExcelReport 1.5.2 使用手冊

開源元件ExcelReport 1.5.2 使用手冊

ExcelReport是一款基於NPOI開發的報表引擎元件。它基於關注點分離的理念,將資料與樣式、格式分離。讓模板承載樣式、格式等NPOI不怎麼擅長且實現繁瑣的資訊,結合NPOI對資料的處理的優點將Excel報表的生成化繁為簡。同時,對報表組成的基本元素進行了抽象,進一步簡化了Excel報表的生成過程。

官方站點

clip_image002[1]

QQ Group:116476496  687474703a2f2f7075622e69647171696d672e636f6d2f7770612f696d616765732f67726f75702e

團隊介紹

Jensen

來自於中國深圳,是這個專案的發起人和開發人員,2014年11月開始了ExcelReport的開發,負責ExcelReport的開發、測試和bug修復。

個人部落格地址:http:// hanzhaoxin.cnblogs.com

許可證說明

ExcelReport採用的是MIT許可,這意味著它可以被用於任何商業或非商業專案,你不用擔心因為使用它而必須開放你自己的原始碼,且可藉助ExcelReport的影響力推廣你的產品。

完整的MIT許可證請見:http://mit-license.org/

版本升級說明:

clip_image002

如果您專案中使用了ExcelReport,Bug修復和功能擴充的升級版本請放心升級,這類升級不能影響您現有的專案。如果架構修改版本資訊發生了變化,請謹慎升級,這類升級有可能影響您現有的專案。

為什麼要用ExcelReport?

回答這個問題前,我們先看看Tony Qu是怎麼回答為什麼要用NPOI的?

1)你不需要在伺服器上安裝微軟的 Office,可以避免版權問題。

2)NPOI使用起來比 Office PIA 的 API 更加方便,更人性化。

3)你不用去花大力氣維護 NPOI,NPOI Team 會不斷更新、改善 NPOI,絕對省成本。

4)很多事情是 html 和cvs法做不到的,比如說公式計算[Cell C1]=A1+B1*A2單元格

高階樣式(如文字旋轉、對齊、寬度)等,其中公式計算可以適當減輕伺服器端的計算壓力

回到我們的問題,為什麼要用ExcelReport呢?

1) 複雜的事情簡單了,不可能的事情可行了。

2) 你不需要了解NPOI大量的API,你不需要用.NET語言寫蹩腳的Java的語法。

3) 套用Tony兄的描述,你不用去花大力氣維護ExcelReport,ExcelReport Team會不斷更新、改善ExcelReport,絕對省成本。

目錄

1報表元素與元素格式化器

2演示:使用ExcelReport生成報表

3格式化器示例

3.1區域性格式化器

3.2單元格格式化器

3.3表格格式化器

3.4重複單元格式化器

4多Sheet報表生成

1報表元素與元素格式化器

在開始示例之前,我們用一章的篇幅介紹ExcelReport是如何將報表的內容抽象為元素的?

又是如何為元素填充資料的?為了說明第一個問題,我們從一個現有的報表開始。

如下報表有兩個Sheet:Sheet1名為“工資表”Sheet2名為“工資條”,其截圖如下所示。

clip_image004

clip_image006

我們先把資料部用藍色框線標出來。

clip_image008

clip_image010

名正才能言順,先說說ExcelReport中報表元素的概念:

  • 元素:填充到報表模板中的資料來源物件,我們稱之為元素。

  • 區域性元素:填充到報表模板中的資料來源物件是一個單元格內容的一部分,我們稱這樣的資料來源物件為區域性元素。

  • 單元格元素:填充到報表模板中的資料來源物件是一個單元格的內容,我們稱這樣的資料來源物件為單元格元素。

  • 表格元素:填充到報表模板中的資料來源是某物件的集合,該物件是一行中多個單元格的內容集合,我們稱這樣的資料來源集合為表格元素。

  • 重複單元元素:填充到報表模板中的資料來源是某物件的集合,該物件是多行中多個單元格的內容集合,我們稱這樣的資料來源集合為重複單元元素。

    【表格元素與重複單元元素資料來源以集合出現。為復元素。】

    【對應的,區域性元素和單元格元素稱之為單元素。】

    clip_image012

    有了定義,我們讓元素們各就各位。

    clip_image014

    clip_image016

    那麼,ExcelReport又是如何為元素填充資料的?

    clip_image018

    話說元素格式化器為此而生。

    報表元素

    元素格式化器

    區域性元素

    PartFormatter

    單元格元素

    CellFormatter

    表格元素

    TableFormatter

    重複單元元素

    RepeaterFormatter

    【元素格式化器的作用是格式化元素將其填充到報表模板。】

    2演示:使用ExcelReport生成報表

    目標報表,生成上章分析的”工資表-工資條”報表。

    第一步:設計模板

    【模板中引數格式:$[ParameterName]】

    clip_image020

    clip_image022

    clip_image024

    1) 開啟模板填充規則檔案生成工具

    clip_image025

    2) 將設計好的模板拖入Excel模板檔案選擇框

    clip_image027

    3) 點選“生成模板規則檔案(.XML)”按鈕,生成規則檔案。

    clip_image029

    第三步:填充模板,生成報表【專案中要新增對ExcelReport及NPOI(2.0以上)的引用】

    clip_image031

    生成匯出報表:

    clip_image033

    clip_image035

    【注:演示示例“生成工資表-工資條報表”原始碼見解決方案:ExcelReportExamples】

    clip_image037

    3格式化器示例

    通過上一章的示例,我們瞭解了ExcelReport生成報表的步驟,也用到了各種格式化器。在本章,我們將對格式化器逐一展開講解,以更詳細的瞭解它們。

    3.1區域性格式化器

    區域性格式化器用於格式化填充一個單元格內容的一部分。填充資料型別為string。

    構成函式:

    clip_image039

    引數

    描述

    cellPoint

    引數所在單元格位置

    parameterName

    引數名

    value

    要格式化填充的值

    示例:(區域性格式化器示例)

    第一步:設計模板

    clip_image041

    第二步:由模板生成模板填充規則檔案

    clip_image043

    第三步:填充模板,生成報表

    clip_image045

    生成匯出報表:

    clip_image047

    3.2單元格格式化器

    單元格格式化器用於格式化填充一個單元格。填充資料型別為object,詳見下表:

    填充資料型別

    Excel中對應的資料型別

    視覺化設定項

    String

    String

    DateTime

    DateTime

    clip_image049

    Boolean

    Boolean

    Int16

    Int32

    Int64

    Byte

    Single

    Double

    UInt16

    UInt32

    UInt64

    clip_image051

    Byte[]

    Image

    構成函式:

    clip_image053

    引數

    描述

    cellPoint

    引數所在單元格位置

    value

    要格式化填充的值

    示例:(單元格格式化器示例)

    第一步:設計模板

    clip_image055

    第二步:由模板生成模板填充規則檔案(略,詳參見第2章“演示”)

    第三步:填充模板,生成報表

    clip_image057

    生成匯出報表:

    clip_image059

    3.3表格格式化器

    表格格式化器用於格式化填充一個表格。填充資料型別為IEnumerable<TSource>。

    建構函式:

    clip_image061

    引數

    描述

    templateRowIndex

    模板行行標

    dataSource

    要格式化填充的資料

    columnInfos

    列資訊集合

    TableColumnInfo建構函式:

    clip_image063

    引數

    描述

    columnIndex

    列標

    dgSetValue

    Func<TSource, object>型別的委託物件(返回值Object,可參照第二節填充資料型別與Excel中資料型別對應表。)

    示例:(表格格式化器示例)

    第一步:設計模板

    clip_image065

    第二步:由模板生成模板填充規則檔案(略,詳參見第2章“演示”)

    第三步:填充模板,生成報表

    clip_image067

    生成匯出報表:

    clip_image069

    提問回覆:【關於TableFormatter有以下知識點,多次被提問,這裡做出統一回答。】

    問題一:TableFormatter的資料來源可以是DataTable嗎?

    答:你可以這樣寫:

    clip_image071

    問題二:我的實體類中沒有實現外鏈,在實體物件中有一個ID屬性,我想匯出的內容是ID對應的Name,這怎麼辦?

    答:和示例中的“性別”沒什麼區別吧。好吧,貼行程式碼:

    clip_image073

    3.4重複單元格式化器

    重複單元格式化器用於格式化填充一個重複單元元素。填充資料型別為IEnumerable<TSource>。

    建構函式:

    clip_image075

    引數

    描述

    startTagCell

    重複單元(開始)標識單元格

    endTagCell

    重複單元(結束)標識單元格

    dataSource

    要格式化填充的資料

    cellInfos

    重複單元包含的單元格資訊集合

    RepeaterCellInfo建構函式:

    clip_image077

    引數

    描述

    cellPoint

    單元格座標

    dgSetValue

    Func<TSource, object>型別的委託物件(返回值Object,可參照第二節填充資料型別與Excel中資料型別對應表。)

    示例:(重複單元格式化器示例)

    第一步:設計模板

    clip_image079

    根據需求,隱藏重複單元標識行。

    clip_image081

    第二步:由模板生成模板填充規則檔案(略,詳參見第2章“演示”)

    第三步:填充模板,生成報表

    clip_image083

    生成匯出報表:

    clip_image085

    4多Sheet報表生成

    到目前為止,我們所有匯出都直接使用的是:ExportHelper類中的靜態方法。其實在ExcelReport元件的設計中Export類便是終點了,ExportHelper類正如它的名字只是為了方便操作提供的助手類而已。

    【哦,它還是部分類,你可以根據需求擴充套件。】

    clip_image087

    回到本章的主題,我們要談的是多Sheet報表的生成。什麼?這和前邊囉嗦的那些有什麼關係?好吧,其實關係也不大,我只是想說關注報表的生成,你看Export類就對了。

    clip_image089

    引數

    描述

    templateFile

    模板檔案路徑

    containers

    Sheet格式化容器的陣列【陣列中的每個元素對應一個Sheet】

    示例:(多Sheet報表生成示例)

    第一步:設計模板

    clip_image091

    clip_image093

    第二步:由模板生成模板填充規則檔案(略,詳參見第2章“演示”)

    第三步:填充模板,生成報表

    clip_image095

    生成匯出報表:

    clip_image097

    clip_image099

  • 相關推薦

    開源元件ExcelReport 1.5.2 使用手冊

    ExcelReport是一款基於NPOI開發的報表引擎元件。它基於關注點分離的理念,將資料與樣式、格式分離。讓模板承載樣式、格式等NPOI不怎麼擅長且實現繁瑣的資訊,結合NPOI對資料的處理的優點將Excel報表的生成化繁為簡。同時,對報表組成的基本元素進行了抽象,進一步簡化了Excel報表的生成過程。 官方

    1.5.2 添加一個用戶lidao指定uid為888 禁止用戶登錄系統 不創建家目錄

    添加 一個用戶 lidao 添加一個用戶lidao指定uid為888 禁止用戶登錄系統 不創建家目錄#添加一個傀儡用戶lidao 並指定這個用戶的uid為888[[email protected]/* */~]# #添加一個用戶lidao指定uid為888 禁止用戶登錄系統 不創建家目

    k8s 1.5.2 安裝腳本

    ride sed baseurl x86 x86_64 1.5 exit nbsp pro 1 #!/bin/bash 2 export RED=‘\E[1;31m‘ 3 export RES=‘\E[0m‘ 4 export GRN=‘\E[1;32m‘

    [Python3網絡爬蟲開發實戰] 1.5.2-PyMongo的安裝

    它的 nim title bsp plain driver .com 版本 了解 在Python中,如果想要和MongoDB進行交互,就需要借助於PyMongo庫,這裏就來了解一下它的安裝方法。 1. 相關鏈接 GitHub:https://github.com/mong

    Algs4-1.5.2使用quick-union算法完成練習1.5.1

    int() width fin out http detail vat web -- 1.5.2使用quick-union算法(請見1.5.2.3節代碼框)完成練習1.5.1。另外,在處理完輸入的每對整數之後畫出id[]數組表示的森林。答:public class UF

    springboot 1.5.2升級2.0.4 mongodb中QueryBuilder中DBObject被棄用,改為Document構造及解決方式

    今天封裝mongo工具包,發現QueryBuilder中DBObject被棄用,改為Document構造。為什麼,我們稍微分析一下  Document實現Map,與基本的DBObject相比,可編寫的程式碼更少 DBObject雖然不被推薦,那些從2.x驅動程式系列可能繼續使用DB

    Spark 1.5.2 on yarn升級問題總結

    1    升級背景 standlone 生產叢集運行了半年,出現資源瓶頸;另外多使用者資源管理問題也凸顯,將spark 遷移到 yarn 上面是目前比較理想的方案。 spark on yarn 有如下兩個優點:

    1.5.2 Prime Palindromes 迴文質數(構造迴文)

    Description 因為151即是一個質數又是一個迴文數(從左到右和從右到左是看一樣的),所以 151 號是迴文質數。 寫一個程式來找出範圍[a,b](5 <= a < b <= 100,000,000)間的所有迴文質數; Input 第 1 行:

    itext-2.1.7.jar和itextasian-1.5.2.jar 在 maven 專案依賴不上。問題解決。

    問題描述:java 匯出 PDF 檔案 遇到報錯 Exception in thread "main" com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized

    阿里中介軟體開源元件:Sentinel 0.2.0正式釋出

    Sentinel 是阿里中介軟體團隊開源的,面向分散式服務架構的輕量級流量控制組件,主要以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度來幫助使用者保護服務的穩定性。 近日,Sentinel 0.2.0 正式釋出。作為一個重要的里程碑版本,Sentinel

    C++網路庫 mongols-1.5.2 釋出,新增 JS 伺服器

       高效能c++網路庫mongols-1.5.2已經發布. 主要更新: 更新web_server,修復一個檔案讀取優化Bug 更新tcp_server,修改預設訊號處理集,新增backlog 配置介面 為多個基於http_server的server新增lru快取數量控

    Win10 安裝Oracle資料庫出現報錯異常——正在檢查作業系統要求...要求結果:5.0,5.1,5.2.....實際結果:6.2

    出現的問題: 我前後兩次在win10系統下安裝oracle 10g 時,都出現這個異常:  正在檢查作業系統要求…  要求的結果: 5.0,5.1,5.2,6.0,6.1 之一  實際結果: 6.2  檢查完成。此次檢查的總體結果為: 失敗 <<<&

    Spark 1.5.2(Scala 2.11)版本的編譯與安裝

    Spark於11月9號又將幾個BUG解決之後,release一個較新的版本。作為spark的追隨者,於是開始重新進行spark的編譯。 有了前面的編譯經驗和之前下載好的java類包,花了大概一分鐘就編譯妥當,於是重新部署配置一下,馬上OK。簡直是高效率。 對於scala

    win64bit安裝oracle 10g版本檢查未通過解決 提示要求的結果: 5.0,5.1,5.2,6.0 之一 實際結果: 6.1

    在WIN7上安裝oracle 10g時,提示如下資訊: 正在檢查作業系統要求...  要求的結果: 5.0,5.1,5.2,6.0 之一  實際結果: 6.1  檢查完成。此次檢查的總體結果為: 失敗 <<<<  問題: Oracle Databas

    5cifar100資料集的讀取-5.1/5.2/5.3TensorFlow讀取Cifar100資料集(上/中/下)

    兩個檔案:cifar_input.py 和 convnets_test.py 只需修改這兩個值,完成cifar10和cifar100之間切換 cifar_input.py: # Copyright 2015 The TensorFlow A

    《Statistical Analysis with Missing Data》習題5.1——5.2

    一、題目 5.1 本題基於之前習題1.6產生關於(Y1,Y2,U)(Y_1, Y_2, U)(Y1​,Y2​,U)的模擬資料: yi1=1+zi1y_{i1}=1+z_{i1}yi1​=1+zi1​ yi2=5+2∗zi1+zi2y_{i2}=5+2*z_{i1

    Postico 1.5.2 Mac 破解版 優秀的PostgreSQL客戶端

    Postico 是一款Mac上優秀的PostgreSQL資料庫客戶端,支援本地和遠端雲服務,可用於資料錄入、分析和應用程式開發,支援Heroku Postgres, Amazon Redshift, Amazon RDS等,非常不錯的一款客戶端! Postico 1.5 Ma

    【資料結構】演算法5.1-5.2 三元組順序表-轉置

    #include<stdio.h> #include<string.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERRO

    hadoop-2.6.0.tar.gz + spark-1.5.2-bin-hadoop2.6.tgz的叢集搭建(單節點)(Ubuntu系統)

    前言 關於幾個疑問和幾處心得! a.用NAT,還是橋接,還是only-host模式? b.用static的ip,還是dhcp的? 答:static c.別認為快照和克隆不重要,小技巧,比別人靈活用,會很節省時間和大大減少錯誤。 d.重用起來指令碼語言的程式設計,如paython

    Tensorflow機器學習專案實戰--1.5.2讀取影象資料

    修改書上的程式碼,新增少量註釋。 環境:python 3 #匯入tensorflow import tensorflow as tf #新建一個Session sess = tf.Session(