近期因為專註於用c# 實現web報表,積累了一些經驗和心得,也寫過一篇介紹文章,也有網友提出沒有說清楚。現覺得想用單篇文章來說明web報表開發難免會大而空,落不到實處。因而便想到每篇文章只關注web報表開發中一方面,由多篇文章而形成一個web報表開發的系列文章,這些web報表開發的系列文章無先後次序,主從之分。每篇文章只是以一種視角來看待web報表開發而已。大家可以只選自己感興趣的部分來看,這樣也能節約大家的時間。這便是web報表開發技術專題的由來。廢話少說,今天便從小小的序號說起吧!
web報表開發技術專題一:序號問題
在中國式報表中,常常會見到儲存格中有 1,2,3,4 ….成一行或一列排列。這便是序號。顯然這些序號值在資料來源中是不存在的,需要web報表開發工具根據一定的規則運算出來。報表中的序號問題常常被一些通用的web報表開發工具所忽略,有時常常會因為一個序號無法產生而被迫要寫代碼,使web報表開發的效率受到大大的限制。
凡是總須研究,才會明白。下面就來看看中國式報表中的序號大體有哪些樣式?
* 固定序號:即在表格中固定好的序號值,不會隨資料內容的多少而變化。這種最簡單了,直接在表格上輸入序號值就可以了。
* 動態序號:即序號值是不固定的,是根據資料來源中的資料而定的。比如:記錄數為8條,則序號為從1至 8。
* 漢字序號:因為我們是中國人,序號常常用一,二,三,四等等來表示,這就需要必須能將數字序號轉換成漢字序號。有時還會在序號的基礎上加上括弧(如:(1))或頓號(如:一、)等等。
* 序號橫向排列:序號有時會縱向排列,也常常會要求能橫向排列。
* 多列序號:分組報表是最常用的報表之一,由此就有根據每個分組欄位都會有一個順序號的問題。
* 跨行的序號:分組報表往往會在其中有小計行,而如果這些小計行中不能要序號,就要求序號要跳過這些小計行。
* 序號的延伸---序列值:有時報表中會有甲乙丙丁等序列值,這也可以看成是序號的一種吧。
文字未免有些空洞,下面以幾張圖的形式來說明一下:
在這個報表中,共有三列序號:總序號,地區序號,產品序號,總序號是直接從1開始的序號值,地區序號是對於每個地區來說從1開始的序號值,產品序號是對於每個地區的每個產品來說是從1開始的序號值。這是一個典型的多列序號的報表。
在這個報表中,紅色字的序號是跨小計行的,即小計行中是沒有序號的。這是典型的跨行的序號的報表。同時在此報表的第二行蘭色字的序號是橫向排列的。即有多少個地區就有多少個序號值。這是典型的動態序號和序號橫向排列的報表。
在這個報表中,有漢字序號:一,二等,也有(1)的序號形式。也有序號的嵌套及多個層次的問題。
上述是我想到的web報表中的序號的形式,還希望大家補充。上面給出了在中國式報表中的序號的可能的形式,相當於web報表開發的序號方面的需求。下面給出在e表中是如何設計並實現這些序號需求的。
在e表中解決上述複雜的序號問題還是靠提煉這些需求,總結出需要設定的報表公式,然後由使用者根據自己的需要組合這些公式來實現的。當然,這些公式並不僅僅是為瞭解決序號的問題而特別設定的。
在e表中解決序號中可能會用到的公式有:
row() 返回當前行號
col() 返回當前列號
&B1 返回分組中的第幾組,或者說返回B1儲存格擴充出來的第幾格。
ds.count() 返回分組中的每組的總數,或者說返回一個擴充儲存格擴充出來的儲存格的個數
tochinese() 由1,2,3 …轉換成 一,二,三….
Map() 顯示值對照轉換表函數,用於比如將1轉換成甲,將2轉換成乙等等。
至於到底如何才能利用這些函數來解決序號問題。想深入地研究的朋友可以到方成公司的網站上線上試用或下載到本地試用上述報表的樣本,通過樣本可直接看到運行效果以及該如何利用這些函數來得到自己想要的序號。
相關連結:
web報表開發技術專題二:報表工具的核心---資料集的變換
web報表開發技術專題三:不規則分組和跨行組運算
web報表工具的製表效率分析
註:本系列文章系本人原創,首發於部落格園,轉載請註明出處。