1.基本概念
1.報表計算模型
在設(shè)計器中單元格之間存在依賴關(guān)系,對于任意一個單元格都可以設(shè)置它的左父格與上父格。單元格父格是可選的,默認情況下,單元格的左父格就是其最近左邊與其位于同一行的單元格;上父格則是其最近上方與其位于同一列的的單元格。如果一個單元格位于第一行,那默認它就沒有上父格,同樣,如果位于第一列,默認它就沒有左父格。打開報表設(shè)計器,選中任意單元格,都可以在其屬性面板看到它的默認上父格或左父格,如下圖所示

2.行類型
在報表設(shè)計器中,選擇任意一行或單元格,點擊右鍵,就可以在彈出菜單中看類類型的定義,如下圖所示:

從右鍵菜單中可以看到,設(shè)計器支持將特定行定義成四種特殊類型,分別是:標(biāo)題行、重復(fù)表頭行、重復(fù)表尾行以及總結(jié)行,這些行類型主要是在分頁時起作用。
1.標(biāo)題行
所謂標(biāo)題行,就是在報表計算后分頁時只會出現(xiàn)在第一頁第一行的行,如果定義了多個行為標(biāo)題行類型,那么這些行將在報表運行后分頁輸出時第一頁最前面插入標(biāo)題行。需要注意的是,我們在報表中可以將位于任意位置的行定義成標(biāo)題行,但報表計算分頁輸出時,總會將這些定義為標(biāo)題行的行放在報表的第一頁最前端顯示。
2.重復(fù)表頭行
與標(biāo)題行不同的是,定義為重復(fù)表頭行的行,在報表計算分頁輸出時會將定義成重復(fù)表頭行的行放在每一頁的前端進行顯示。如果當(dāng)前報表中定義的有標(biāo)題行,那么對于第一頁,標(biāo)題前將位于最上面,其下才是重復(fù)表頭行定義的行
3.重復(fù)表尾行
與重復(fù)表頭行類型,它也會在報表計算分頁輸出時放在每一頁中顯示,只是它會在每一頁的最下端顯示。
4.總結(jié)行
與標(biāo)題行對應(yīng),總結(jié)行會出現(xiàn)在報表計算后分頁輸出時最后一頁的最下端顯示。如果當(dāng)前報表中定義了重復(fù)表尾行,那么在報表計算后分頁輸出的最后一頁中總結(jié)后將位于重復(fù)表尾行下方顯示。
2.表達式
在報表使用過程當(dāng)中,不可避免的要使用函數(shù)及表達式實現(xiàn)一些數(shù)據(jù)的計算,在我們的報表當(dāng)中,很多地方都支持編寫表達式,比如最典型的我們可以將單元格類型改為“表達式”,這樣就可以在下面的表達式編輯器里輸入相應(yīng)的表達式與函數(shù),除此之外,我們的報表還允許我們在條件、圖片來源、二維碼數(shù)據(jù)來源等地方使用表達式,所以學(xué)習(xí)并掌握UReport2中提供的表達式,是制作復(fù)雜報表的前提。
1.基本語法
1.基本數(shù)據(jù)類型
| 類型 | 描述 | 示例 |
|---|---|---|
| 數(shù)字 | 可以是一個整數(shù),也可以是一個小數(shù) | 1、123、0.121331,這些都是合法的數(shù)字 |
| 字符串 | 字符串需要用單引號或雙引號包裹 | 'ureport2'、"UReport2"、‘UReport2教程’,這些都是合法的字符串 |
| 布爾值 | 布爾值表示是或否 | 布爾就兩個:true和false |
2.操作符
| 操作符 | 描述 | 示例 |
|---|---|---|
| + | 求兩個數(shù)的和,或者是連接兩個值 | 21+31,這就表示求這兩個數(shù)的和,結(jié)果就是52,“值:”+331則表示連接兩個值,其結(jié)果就是“值:331” |
| - | 求兩個數(shù)差 | 21 - 31,這就表示求這兩個數(shù)的差,結(jié)果就是-10 |
| * | 求兩個數(shù)的乘積 | 3*6,結(jié)果就是18 |
| / | 求兩個數(shù)除的結(jié)果 | 6/3,結(jié)果就是2,如果除不盡,則會保留8位小數(shù) |
| % | 求兩個數(shù)除的余值 | 5%3,結(jié)果是2;6%2結(jié)果是0 |
2.三元表達式
| 三元表達式示例 | 描述 |
|---|---|
| A1>1000 ? "正常值" : "低值" | 表達式計算時,先取到A1單元格的值,判斷值是否大于1000,如果是返回“正常值”字符串,否則返回“低值”字符串 |
| A1>1000 and A1<20000 ? "正常值" : "修正值:"+(A1+100) | 條件部分,判斷A1值是否大于1000且小于20000,如果是返回"正常值",否則返回字符串”修正值“與A1值加100后結(jié)果連接的值,如果A1是2000,那么就返回”修正值:2100“ |
3.if判斷
| if判斷示例 | 描述 |
|---|---|
| if(A1>1000){return "正常值"} | 判斷A1單元格的值是不是大于1000,如果是返回”正常值“字符串,否則什么都不做 |
| f(A1>1000){"正常值"}else{"低值"} | 判斷A1單元格的值是不是大于1000,如果是返回”正常值“字符串,否則返回”低值“字符串。 |
| if(A1>1000 and A1<20000){"正常值:"+A1}else if(A>20000 and A1<40000){"超高值"}else{"低值"} | 在這個例子當(dāng)中,條件部分添加了多個組合條件,同時elseif多重判斷 |
4.單元格引用
在報表當(dāng)中,大多數(shù)的計算都是針對單元格或與單元格有關(guān),因為報表中單元格多數(shù)都與數(shù)據(jù)綁定,而數(shù)據(jù)往往又是多條,所以計算后的報表一個單元格會產(chǎn)生多個,這樣對于單元格的引用就變的比較復(fù)雜。在報表設(shè)計器中,引用的目標(biāo)單元格是相對當(dāng)前單元格來進行計算的,引用方法就是直接在表達式里書寫單元格名稱,比如引用A1單元格,就直接寫A1即可,如下面的例子:

在上圖當(dāng)中,我們在D1單元格中輸入表達式A1,這就表示,在D1單元格里填入相對當(dāng)前D1單元格的A1單元格的值,運行后的效果如下:

可以看到,因為D1是A1的子格,A1單元格綁定的數(shù)據(jù)就是分組結(jié)構(gòu),根據(jù)當(dāng)前D1單元格的位置,就產(chǎn)生的上圖所示的結(jié)果。如果在D1單元格中輸入B1,那么運行后的效果又是下圖的樣子:

通過上面的例子我們可以看到,某個單元格的表達式引用目標(biāo)單元格,首先判斷的是目標(biāo)單元格與其所在單元格是否位于同一行或行,如果是則直接取對應(yīng)行或列上目標(biāo)單元格的值。如果當(dāng)前單元格與目標(biāo)單元格不在同一行或列,那情況又不一樣了,我們來看下一個例子。

在上面的例子中,我們在C2單元格的表達式中輸入B1,表示取B1單元格的值,但B1單元格又和C2不在同一行或列上,同時B1單元格展開后會有多個值,但B1單元格和C2單元格都擁有一個共同的父格或間接父格A1(C2單元格的左父格是B2,而B2單元格的左父格又是A1,所以A1是C2單元格的間接左父格),所以它會取他們共同父格A1下所有B1的值,運行結(jié)果如下圖所示:

針對上面的例子,如果我們在上面的單元格中輸入C1,那結(jié)果又不一樣;因為C1是C2的上父格,所以將直接取與其位于同一列的上父格單元格的值,運行效果如下圖所示:

再看下面的報表示例:

在上面的例子中,B2單元格表達里輸入C1,因為B2和C2既不在同一行或列,也沒有共同的父格,所以B2中將取到所有的C1單元格的值,如下圖所示:

5.單元格坐標(biāo)
為了實現(xiàn)更為復(fù)雜的單元格引用,設(shè)計器引用了單元格坐標(biāo)的概念。單元格坐標(biāo),也是相對于當(dāng)前單元格來進行計算的,同樣遵循上面的介紹的優(yōu)先取同行、同列或共同父格的原則,一個標(biāo)準(zhǔn)的單元格坐標(biāo)格式如下:
單元格坐標(biāo)格式:單元格名稱[Li:li,Li-1:li-1,…;Ti:ti,Ti-1:ti-1…]{條件...}
L表示左父格,l表示左父格展示后的序號,序號為負值,表示向上位移;T表示上父格,t表示上父格展開后的序號,序號為負值,表示相對于當(dāng)前單元格向上位移,正值則表示向下位移,如果只有左父格,那么直接寫L部分即可;如果只是上父格,那么前面需要加上“;”號,然后寫T部分,后面的大括號中是條件部分,多個條件之間用and/or連接,表示對通過坐標(biāo)取到的單元格進行條件過濾(如果取到多個單元格的話),條件部分是可選的,相關(guān)示例如下:
| 單元格坐標(biāo)示例 | 描述 |
|---|---|
| C1[A1:2,B1:1] | 在找C1時先找單元格A1展開后的第2格;再找第二個A1下的B1單元格展開后的第一個單元格,然后再找這個B1單元格對應(yīng)的C1單元格 |
| C2[A1:2,B1:2;C1:3] | 在找C2時,先找A1單元格展開后的第二格,再找第二個A1單元格下B2單元格展開后的第二格,再根據(jù)第二個展開的B2單元格找其下名為C2單元格的左子格;然后再找到C1單元格展開后的第三格,再看其下的C2單元格,取C2單元格的交集 |
| C2[A1:2,B2:2]{C2>1000} | 表示取A2單元格展開后的第二格,再取其下B2單元格展開后第二格,再取B2下所有的C2單元格,最后再對取到的C2單元格進行條件過濾,只取出C2單元格值大于1000的所有C2單元格。 |
| C2[A1:2,B2:2]{C2>1000 and C2<10000} | 表示取A2單元格展開后的第二格,再取其下B2單元格展開后第二格,再取B2下所有的C2單元格,最后再對取到的C2單元格進行條件過濾,只取出C2單元格值大于1000且小于10000的所有C2單元格的值。 |
我們來看一個具體的示例,報表模版如下:

在上面的報表模版中,在B2單元格表達式里,我們輸入了C1[A1:2,B1:1],這就表示取A1單元格展開后第二格下B1單元格展開后第一格下對應(yīng)的C1單元格的值,所以運行后我們可以看到如下圖所示效果:

3.函數(shù)
1.常用函數(shù)
1.count函數(shù)(統(tǒng)計數(shù)量)
count函數(shù)是對給定的表達式在計算后對象數(shù)量進行統(tǒng)計。
| 示例 | 說明 |
|---|---|
| count(C1) | 統(tǒng)計相對當(dāng)前所在單元格,目標(biāo)C1單元格數(shù)量 |
| count(C1{age>20}) | 統(tǒng)計相對當(dāng)前所在單元格,目標(biāo)C1單元格綁定對象的age屬性大于20的C1單元格數(shù)量 |
| count(C1,C2) | 統(tǒng)計相對當(dāng)前所在單元格,目標(biāo)C1單元格以及C2單元格加在一起的數(shù)量 |
| count(C1{age>20},C2{salary>2000 and degree=='本科'}) | 統(tǒng)計相對當(dāng)前所在單元格,目標(biāo)C1單元格綁定對象的age屬性大于20的C1單元格以及C2單元格綁定對象的salary屬性大于2000同時degree屬性等于本科的單元格數(shù)量 |
2.sum函數(shù)(累加)
sum函數(shù)是對給定的表達式在計算后值進行累加,sum函數(shù)要求各個表達式計算后的值必須是數(shù)字,否則將產(chǎn)生錯誤。
| 示例 | 說明 |
|---|---|
| sum(C1) | 相對當(dāng)前單元格,取到所有C1單元格值進行累加 |
| sum(C1,C2) | 相對當(dāng)前單元格,取到所有C1和C2單元格的值進行累加 |
| sum(C1{age>20}) | 相對當(dāng)前單元格,取到所有綁定對象屬性age大于20的C1單元格值進行累加 |
| sum(C1{age>20},C2{salary>2000 and degree=='本科'}) | 相對當(dāng)前單元格,取到所有綁定對象屬性age大于20的C1單元格值以及綁定對象屬性salary大于2000且degree屬性等于本科的C2單元格的值進行累加 |
3.avg函數(shù)(求平均值)
avg函數(shù)是對給定的表達式在計算后值求平均值,avg函數(shù)要求各個表達式計算后的值必須是數(shù)字,否則將產(chǎn)生錯誤。
| 示例 | 說明 |
|---|---|
| avg(C1) | 相對當(dāng)前單元格,求C1單元格的平均值 |
| avg(C1{age>20}) | 相對當(dāng)前單元格,取到綁定對象屬性age大于20的C1單元格值的平均值 |
| avg(C1,C2) | 相對當(dāng)前單元格,求C1和C2單元格的平均值 |
| avg(C1{age>20},C2{salary>2000 and degree=='本科'}) | 相對當(dāng)前單元格,取到所有綁定對象屬性age大于20的C1單元格值以及綁定對象屬性salary大于2000且degree屬性等于本科的C2單元格的值進行求平均值 |
4.max函數(shù)(求最大值)
max函數(shù)是對給定的表達式在計算后值求其中的最大值,max函數(shù)要求各個表達式計算后的值必須是數(shù)字,否則將產(chǎn)生錯誤。
| 示例 | 說明 |
|---|---|
| max(C1) | 相對當(dāng)前單元格,求C1單元格的最大值 |
| max(C1{age>20}) | 相對當(dāng)前單元格,取到綁定對象屬性age大于20的C1單元格值的最大值 |
| max(C1,C2) | 相對當(dāng)前單元格,求C1和C2單元格的最大值 |
| max(C1{age>20},C2{salary>2000 and degree=='本科'}) | 相對當(dāng)前單元格,取到所有綁定對象屬性age大于20的C1單元格值以及綁定對象屬性salary大于2000且degree屬性等于本科的C2單元格的值進行求最大值 |
5.min函數(shù)(求最小值)
min函數(shù)是對給定的表達式在計算后值求其中的最小值,min函數(shù)要求各個表達式計算后的值必須是數(shù)字,否則將產(chǎn)生錯誤。
| 示例 | 說明 |
|---|---|
| min(C1) | 相對當(dāng)前單元格,求C1單元格的最小值 |
| min(C1{age>20}) | 相對當(dāng)前單元格,取到綁定對象屬性age大于20的C1單元格值的最小值 |
| min(C1,C2) | 相對當(dāng)前單元格,求C1和C2單元格的最小值 |
| min(C1{age>20},C2{salary>2000 and degree=='本科'}) | 相對當(dāng)前單元格,取到所有綁定對象屬性age大于20的C1單元格值以及綁定對象屬性salary大于2000且degree屬性等于本科的C2單元格的值進行求最小值 |
6.row函數(shù)(取行號)####
取當(dāng)前單元格所在行的行號,這個函數(shù)比較簡單,它沒有參數(shù)。
| 示例 | 說明 |
|---|---|
| row() | 取當(dāng)前單元格所在行的行號 |
7.column函數(shù)(取列號)####
取當(dāng)前單元格所在列的列號,這個函數(shù)比較簡單,它沒有參數(shù)。
| 示例 | 說明 |
|---|---|
| column() | 取當(dāng)前單元格所在列的列號 |
2.分頁相關(guān)函數(shù)
所謂分頁相關(guān)函數(shù),是指這些函數(shù)是在分頁的時候進行計算,比如計算當(dāng)前頁有多少條記錄、當(dāng)前頁某個單元格值累加后是多少、平均值是多少、最大值是多少等等。
1.pcount函數(shù)
統(tǒng)計當(dāng)前頁下表達對應(yīng)值的數(shù)目,與count函數(shù)的使用方法基本一致,不同之處在于pcount只會統(tǒng)計當(dāng)前頁中對應(yīng)的表達式內(nèi)容的數(shù)目。
| 示例 | 說明 |
|---|---|
| pcount(C1) | 統(tǒng)計當(dāng)前頁中,C1單元格數(shù)目 |
| pcount(C1,D2{D2>10000}) | 統(tǒng)計當(dāng)前頁中,C1單元格和當(dāng)前頁中所有D2單元格值大于10000的D2單元格數(shù)目 |
2.psum函數(shù)
將當(dāng)前頁下表達式對應(yīng)的所有值進行累加,與sum函數(shù)對應(yīng),不同的是psum只針對當(dāng)前頁。
| 示例 | 說明 |
|---|---|
| psum(C1) | 將當(dāng)前頁中,所有C1單元格值進行累加 |
| psum(C1,D2{D2>10000}) | 將當(dāng)前頁中,所有C1單元格值以及值小于10000的D2單元格值累加起來 |
3.pmax函數(shù)
比較當(dāng)前頁中,表達式對應(yīng)的值,找出其中最大的那個值,與max函數(shù)對應(yīng),只是pmax只針對當(dāng)前頁。
| 示例 | 說明 |
|---|---|
| pmax(C1) | 比較當(dāng)前頁中所有C1單元格值,找出最大值。 |
| pmax(C1,D2{D2>10000}) | 比較當(dāng)前頁中,所有C1、D2以及值大于1000的E2單元格值,找出其中最大的。 |
4.pmin函數(shù)
比較當(dāng)前頁中,表達式對應(yīng)的值,找出其中最小的那個值,與min函數(shù)對應(yīng),只是pmin只針對當(dāng)前頁。
| 示例 | 說明 |
|---|---|
| pmin(C1) | 比較當(dāng)前頁中所有C1單元格值,找出最小值。 |
| pmin(C1,D2,E2{E2>1000}) | 比較當(dāng)前頁中,所有C1、D2以及值大于1000的E2單元格值,找出其中最小的。 |
5.page函數(shù)
輸出當(dāng)前所在頁的頁碼,該函數(shù)沒有參數(shù)。
| 示例 | 說明 |
|---|---|
| page() | 輸出當(dāng)前所在頁的頁碼。 |
6.pages函數(shù)
輸出當(dāng)前報表一共有多少頁,該函數(shù)沒有參數(shù)。(pages函數(shù)目前僅能在頁眉頁腳中使用)
| 示例 | 說明 |
|---|---|
| pages() | 輸出當(dāng)前報表一共有多少頁。 |
3.數(shù)學(xué)函數(shù)
1.abs函數(shù)(絕對值)
求參數(shù)的絕對值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| abs(-233) | 求-233絕對值,計算后的值是233 |
| abs(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果有多個則取第一個值返回其絕對值 |
2.ceil函數(shù)(最小值)
對參數(shù)值取最小值,如果參數(shù)值為小數(shù)將舍棄小數(shù)點后面的小數(shù)部分,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| ceil(32.32) | 計算后值為32 |
| ceil(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果有多個則取第一個值返回其最小值 |
3.floor函數(shù)(最大值)
對參數(shù)值取最大值,如果參數(shù)值為小數(shù)將四舍五入小數(shù)點后面的小數(shù)部分,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| floor(32.52) | 計算后值為33 |
| floor(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果有多個則取第一個值返回其最大值 |
4.chn函數(shù)(數(shù)字轉(zhuǎn)中文)
將一個數(shù)字轉(zhuǎn)化成中文,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| chn(213) | 計算后的值為:貳佰壹拾叁 |
| chn(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果有多個則取第一個值,再轉(zhuǎn)化成中文 |
5.cos函數(shù)(求余弦)
求參數(shù)的余弦值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| cos(213) | 計算后的值為:0.8090276252864301 |
| cos(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果有多個則取第一個值,再求其余弦值 |
6.sin函數(shù)(正弦)
求參數(shù)的正弦值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同cos()
7.tan函數(shù)(正切)
求參數(shù)的正切值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同cos()
8.exp函數(shù)(方法用于返回自然數(shù)底數(shù)e的參數(shù)次方)
求參數(shù)的自然數(shù)底數(shù)e的參數(shù)次方,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同cos()
9.log10函數(shù)(返回以10為底的對數(shù)值)
求參數(shù)以10為底的對數(shù)值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同cos()
10.log函數(shù)(自然對數(shù))
求參數(shù)自然對數(shù)值,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同cos()
11.median函數(shù)(中位數(shù))
求一組數(shù)據(jù)的中位數(shù),參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| median(12,42,31) | 運行結(jié)果為31 |
| median(C1) | 相對當(dāng)前單元格,取到C1單元格的所有值,再取這些值中位數(shù) |
| median(C1,C2) | 相對當(dāng)前單元格,取到C1單元格和C2單元格的所有值,再取這些值中位數(shù) |
12.mode函數(shù)(眾數(shù))
求一組數(shù)據(jù)的眾數(shù),參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| mode(12,42,3,12) | 運行結(jié)果為12 |
| mode(C1) | 相對當(dāng)前單元格,取到C1單元格的所有值,再取這些值眾數(shù) |
| mode(C1,C2) | 相對當(dāng)前單元格,取到C1單元格和C2單元格的所有值,再取這些值眾數(shù) |
13.vara函數(shù)(方差)
求一組數(shù)據(jù)的方差,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同median()
14.stdevp函數(shù)(標(biāo)準(zhǔn)差)
求一組數(shù)據(jù)的標(biāo)準(zhǔn)差,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。使用方法同median()
15.pow函數(shù)(返回第一個參數(shù)的第二個參數(shù)次方)
pow函數(shù)需要兩個參數(shù),第一個為需要計算的數(shù)字或表達式,第二個為具體的次方。
| 示例 | 說明 |
|---|---|
| pow(3,2) | 表示計算3的2次方值,運算后的結(jié)果為9 |
| pow(C1,3) | 相對當(dāng)前單元格,取到C1單元格的值,如果取到的C1單元格有多個,則取第一個,再對其值求3次方 |
16.random函數(shù)(隨機數(shù))
生成一個隨機數(shù),可以有一個數(shù)字類型的參數(shù)或表達式,如果有參數(shù),那么以這個參數(shù)作為生成隨機數(shù)字的種子,如果沒有則生成一個0~1之間的隨機數(shù)。
| 示例 | 說明 |
|---|---|
| random() | 生成一個0~1之間的隨機數(shù) |
| random(10) | 生成一個1~10之間的隨機數(shù) |
| random(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果取到的C1單元格有多個,則取第一個,再將這個值作為種子生成一個隨機數(shù) |
17.round函數(shù)(四舍五入)
對一個小數(shù)進行四舍五入,它需要兩個參數(shù),第一個參數(shù)要進行四舍五入的小數(shù)或表達式,第二個為一個可選的要保留的小數(shù)位數(shù),如果沒有,則不保留小數(shù)。
| 示例 | 說明 |
|---|---|
| round(32.12) | 計算后的值為32 |
| round(32.123,2) | 計算后的值為32.12 |
| round(C1,2) | 相對當(dāng)前單元格,取到C1單元格的值,如果取到的C1單元格有多個,則取第一個,然后對這個值做保留兩位小數(shù)的四舍五入操作 |
18.sqrt函數(shù)(平方根)
求一個數(shù)字或表達式計算后值的平方根,參數(shù)值計算后數(shù)據(jù)類型必須是數(shù)字,否則會報錯。
| 示例 | 說明 |
|---|---|
| sqrt(2) | 計算后的值為:1.414214 |
| sqrt(C1) | 相對當(dāng)前單元格,取到C1單元格的值,如果取到的C1單元格有多個,則取第一個,然后對這個值進行取平方根計算 |
4.日期函數(shù)
1.date函數(shù)(日期)
輸出日期,date函數(shù)可以有一個參數(shù),就是日期格式,如果沒有則采用yyyy-MM-dd HH:mm:ss格式輸出日期。
| 示例 | 說明 |
|---|---|
| date() | 以yyyy-MM-dd HH:mm:ss格式輸出當(dāng)前日期,如:2010-08-15 08:45:10 |
| date('yyyy年MM月dd日') | 以yyyy年MM月dd日格式輸出當(dāng)前日期,如:2010年08月15日 |
2.day函數(shù)(天)
輸出當(dāng)前在月份中的天,該函數(shù)沒有參數(shù)。
| 示例 | 說明 |
|---|---|
| day() | 可能輸出15,表示當(dāng)前為15日 |
3.month函數(shù)(月)
輸出當(dāng)前月份,該函數(shù)沒有參數(shù)。用法同day()
4.year函數(shù)(年)
輸出當(dāng)前年份,該函數(shù)沒有參數(shù)。用法同day()
5.week函數(shù)(星期)
輸出當(dāng)前是星期幾,該函數(shù)沒有參數(shù)。
| 示例 | 說明 |
|---|---|
| week() | 輸出值可能是“星期三”,表示當(dāng)前為星期三 |
5.字符串函數(shù)
1.indexOf函數(shù)(位置)
用于返回一個字符串,在目標(biāo)字符串中的位置,該函數(shù)至少需要兩個參數(shù),第一個為目標(biāo)字符串,第二個為要查找的字符串,如果有三個參數(shù),那么第三個就是開始查找的位置信息,第三個參數(shù)必須是一定大于等于0的數(shù)字。
| 示例 | 說明 |
|---|---|
| indexof('中華人民共和國','共和') | 表示要從"中華人民共和國"這個字符串中找到“共和”字符串的位置 |
| indexof('中華人民共和國','共和',2) | 表示要從"中華人民共和國"這個字符串中第二個字符開始始,找到“共和”字符串的位置 |
| indexof(C1,"人民",2) | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,再從這個值中第2個位置開始找到“人民”字符串的位置 |
2.length函數(shù)(長度)
求目標(biāo)字符串長度,該函數(shù)必須要有一個參數(shù)。
| 示例 | 說明 |
|---|---|
| length("中華人民共和國") | 7 |
| length(C1) | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,然后計算這個值長度 |
3.lower函數(shù)(轉(zhuǎn)小寫)
將參數(shù)中英文全部轉(zhuǎn)為小寫,該函數(shù)必須要有一個參數(shù)。
| 示例 | 說明 |
|---|---|
| lower("Super Man") | 計算后的結(jié)果為:super man |
| lower(C1) | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,然后將這個值中所有英文轉(zhuǎn)換成小寫 |
4.upper函數(shù)(轉(zhuǎn)大寫)
將參數(shù)中英文全部轉(zhuǎn)為大寫,該函數(shù)必須要有一個參數(shù)。用法同lower()
5.replace函數(shù)(替換字符串)
這個函數(shù)需要有三個參數(shù),第一個是目標(biāo)字符串,第二個是要被替換的字符串,第三個是要替換的字符串。
| 示例 | 說明 |
|---|---|
| replace("他是一個好人","他","她") | 計算結(jié)果為:她是一個好人 |
| replace(C1,"他","她") | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,然后再將這個值中所有“他”換成“她” |
6.substring函數(shù)(子字符串)
該函數(shù)允許有三個參數(shù),第一個是原字符串,第二個為開始截取的位置,第三個為截取結(jié)束的位置,第三個缺省即為字符串尾部。
| 示例 | 說明 |
|---|---|
| substring("他是一個好人",2) | 運行結(jié)果為:一個好人 |
| substring("他是一個好人",2,4) | 運行結(jié)果為:一個 |
| substring(C1,2,10) | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,然后再取這個值中第2到第10個字符之間內(nèi)容 |
7.trim函數(shù)(去空格)
去除目標(biāo)字符串兩邊空格,該函數(shù)要求必須要有一個參數(shù)。
| 示例 | 說明 |
|---|---|
| trim(" 一個好人 ") | 運行結(jié)果為:一個好人 |
| trim(C1) | 相對于當(dāng)前單元格,找到C1單元格,如果C1單元格有多個,則取第一個單元格值,然后再將這個值兩邊可能存在的空格全部去除 |
3.數(shù)據(jù)引用
1.配置數(shù)據(jù)源
新建數(shù)據(jù)源

填寫數(shù)據(jù)源信息,數(shù)據(jù)源名稱自己定義,Bean ID填寫配好的Bean。

填寫數(shù)據(jù)集信息,數(shù)據(jù)集名稱自己定義,方法名選擇及返回對象對應(yīng)填寫。

刷新字段

2.設(shè)置數(shù)據(jù)集單元格
選中單元格,單元格屬性設(shè)置中類型為“數(shù)據(jù)集”,選擇對應(yīng)的數(shù)據(jù)源及屬性

3.表達式引用單元格
選中單元格,單元格屬性設(shè)置中類型為表達式,表達式一欄填寫表達式

語法規(guī)則如下:數(shù)據(jù)集名稱.聚合方式(字段名[,條件,排序方式]),具體聚合類型有以下幾種:
1.select(羅列數(shù)據(jù))
| 示例 | 說明 |
|---|---|
| ds1.select(username) | 取數(shù)據(jù)集ds1中所有的username字段信息 |
| ds1.select(username,age>18) | 取數(shù)據(jù)集ds1中所有的age屬性大于18的username字段信息 |
| ds1.select(username,age>18, desc) | 取數(shù)據(jù)集ds1中所有的age屬性大于18的username字段信息,同時對username字段做倒排序 |
| ds1.select(username,age>18 and age<60, asc) | 取數(shù)據(jù)集ds1中所有的age屬性大于18且小于60的username字段信息,同時對username字段做正排序 |
2.group(分組羅列數(shù)據(jù))
| 示例 | 說明 |
|---|---|
| ds1.group(degree) | 對數(shù)據(jù)集ds1中degree字段進行分組 |
| ds1.group(degree,age>18) | 對數(shù)據(jù)集ds1中age屬性大于18的所有的degree字段進行分組 |
| ds1.group(degree,age>18, asc) | 對數(shù)據(jù)集ds1中age屬性大于18的所有的degree字段進行分組,同時對分組后的degree字段進行正排序 |
3.sum(累加數(shù)據(jù))
sum是對數(shù)據(jù)集目標(biāo)字段進行累加,所以目標(biāo)字段一定要是一個數(shù)字類型,否則就會產(chǎn)生錯誤
| 示例 | 說明 |
|---|---|
| ds1.sum(salary) | 對于數(shù)據(jù)集ds1中的salary字段進行累加 |
| ds1.sum(salary, age>30) | 對數(shù)據(jù)集ds1中age屬性大于30的所有對象的salary字段進行累加 |
4.count(統(tǒng)計數(shù)量)
count是對數(shù)據(jù)集對象數(shù)量進行統(tǒng)計,統(tǒng)計數(shù)量不需要指定propertyName及order
| 示例 | 說明 |
|---|---|
| ds1.count() | 對ds1數(shù)據(jù)集中對象數(shù)量進行統(tǒng)計 |
| ds1.count(age>30) | 統(tǒng)計數(shù)據(jù)集ds1中對象屬性age值大30的所有對象的數(shù)量 |
5.max(取最大值)
max是對數(shù)據(jù)集對象中某一字段進行比較,取最大值,取最大值沒有order。
| 示例 | 說明 |
|---|---|
| ds1.max(salary) | 對于數(shù)據(jù)集ds1中的salary字段進行比較,取最大值 |
| ds1.max(salary, age>30) | 對數(shù)據(jù)集ds1中age屬性大于30的所有對象的salary字段進行比較,取最大值 |
6.min(取最小值)
min是對數(shù)據(jù)集對象中某一字段進行比較,取最小值,取最小值沒有order。用法同max()
7.avg(取平均值)
avg是對數(shù)據(jù)集對象中某一字段進行比較,取平均值,除不盡默認保留8位小數(shù),取平均值沒有order。用法同max()