漢字數字排序

1. 概述

1.1 問題描述

設計報表時,如果遇到「序號」是用漢字數字來表示的,那麼要如何對它進行排序呢,如下:

1.2 解決思路

方案一:資料很少時,可以使用進階排序-自訂順序。也可利用內建資料集實現,詳情請參照文檔:利用內建資料集實現自訂排序

方案二:在「擴展後排序」中新增公式。因為 FineReport 中沒有將漢字數字轉化為阿拉伯數位的公式,所以我們可以反過來,用 numto() 公式將阿拉伯數字轉化為漢字數字,再將漢字數字與對應的阿拉伯數字聯絡起來。

注:方案二只適用於漢字數字從「一」開始且數字連續的場景。

2. 範例

2.1 準備資料

建立內建資料集,新增兩個欄位「序號」、「項目」,均為字串類型,設計表如下圖所示:

2.2 報表設計

將資料列拖入儲存格,輸入對應的標題,表格樣式設計如下:

2.3 方案一:進階排序

雙擊 A2 儲存格,點選「進階」,設定排列順序為「升冪」,輸入公式:SWITCH($$$,"一",1,"二",2,"三",3,"四",4)。如下圖所示:

2.4 方案二:擴展後排序

選中 A2 儲存格,點選「儲存格屬性>擴展」,設定「擴展後排序」為「升冪」,輸入公式: INARRAY($$$, MAPARRAY(RANGE(COUNT(A2[!0])), NUMTO(item)))

公式說明如下表:

公式
說明
MAPARRAY(array,fn)

批量處理陣列,透過 fn 對陣列中的元素進行轉換

array(Array):要轉換的陣列,即 RANGE(COUNT(A2[!0]))

fn(Function):處理陣列項目的函式,即 NUMTO(item)

RANGE(COUNT(A2[!0])) 傳回陣列: [1,2,3,4],COUNT(A2[!0]) 為計算 A2 儲存格擴展出來的所有值的個數
NUMTO(item)

傳回數位的中文表示。

注:NUMTO()函式不支援小數

MAPARRAY(RANGE(COUNT(A2[!0])), NUMTO(item))傳回陣列:[一,二,三,四]
INARRAY($$$,array)傳回儲存格當前值在陣欄 array 中的位置,如果不在 array 中,則傳回 0

步驟如下圖所示:

2.5 效果預覽

2.4.1 PC 端

儲存報表,點選「分頁預覽」,效果如下圖所示:

2.4.2 行動端

App 端和 HTML5 端均支援,效果如下圖所示:

3. 範本下載

文檔僅給出方案二範本。

已完成範本可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\SpecialSubject\OrderReport\漢字數字排序.cpt

點選下載範本:漢字數字排序.cpt

附件列表


主題: 報表專題
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

7s后關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙