在列數固定的報表中逐格橫向填充數據並折行

在不少須要打印的報表中,受限於紙張的大小,每每會限制行數或者固定列數。咱們在《單據類報表的製做》一文中,曾經介紹了限制了行數的狀況如何實現,如今,咱們再來看一下,在固定了列數的狀況下,若是在某些行中,逐格橫向填充數據,並在超過列數後自動折行。數據庫

咱們先看一個例子的效果圖:工具

apng

在這張報表,由上而下其實分紅了幾個部分:字體

首先,表頭和前兩行是簡單的描述信息;spa

而後,其實是一個 4 行 5 列的固定表格,對「覈定」、「實有」、「超空」、「批准使用」這四個項目進行了統計彙總;設計

再往下, 「登記」這一行填充了來自數據庫的人員姓名,爲了整齊美觀,要求按 4 個項目對應的 4 列逐格填充,並且人員數量會根據數據庫中的實際狀況填充,若是,當多於 4 人時還須要折行後繼續按照一行 4 列進行填充,如圖中的藍色字體部分所示;3d

最後的兩行都是文本描述。blog

相似的表格其實咱們經常會遇到,例以下面這張 「學校公物監護人統計表」:字符串

bjpg

每一類公物的監護人橫向逐格填寫,超過 4 個時,都要折行展示,好比表中的「窗簾、窗戶」的監護人。it

熟悉報表設計的兄弟姐妹都清楚,一個業務字段的取值通常都是定義到一個格子後自動擴展,如今要分別放到 4 個單元格,這怎麼拆開定義?擴展

彆着急!!下面將結合第一個「使用單」的例子,來了解一個神奇的報表工具。

根據表格自己硬性要求(4 列是固定列,不能自動擴展),咱們能想到的方法只有用座標的方式,按照位置號把登記人依次擺到對應單元格。

若是數據庫中登記人員的姓名(XM)以下

cpng

那麼咱們就把登記人前 4 個(張3、李4、王2、王麻子)依次放到對應 14 格子裏,下面 4 個再按照 58 放至第二行,依次類推。。。

至於另外一個問題是應該擺幾行?其實很簡單,總人數除以 4,咱們就能夠判斷出來了。

下面就是具體的操做過程:

  1. 把「使用單」固定格式的部分先畫出來……
  2. 設置數據集,例子裏使用潤乾報表內建數據集進行模擬,如上圖所示;
  3. 按照上面的分析思路完成行數計算及按座標擺放的工做

dpng

其中:

(1)在「登記」行前增長一行,在 B11 中定義表達式:ds2.select(XM), 把登記人(XM)數據查出來備用,同時 B11 設置爲「不可擴展」,此時爲 XM 字段全部數據以逗號隔開的字符串(如,「張三, 李四」)。
(2)計算行數

在原 D 列前插入一列,在 D12 中定義表達式:

=to(1,int(ceil(ds2.count()/4)))

其中,int(ceil(ds2.count()/4)) 就是可擴展出的總行數

(3)按座標擺放:

E12 表達式:=split(B11,「,」)(4∗(D12−1)+1)

 

G12 表達式:=split(B11,「,」)(4∗(D12−1)+2)

 

I12 表達式:=split(B11,「,」)(4∗(D12−1)+3)

 

K12 表達式:=split(B11,「,」)(4∗(D12−1)+4)

 

其中標紅的部分即爲按位置座標取數。

(4)把新增的 D 列及 11 行設置爲「隱藏」,僅用來輔助存放登記人序列串與生成行數,不須要顯示。

4. 最後效果如我所願,完美解決!

相關文章
相關標籤/搜索