1. 概述
1.1 問題描述
Cnmoney函式 在將數字轉換為人民幣大寫時,小數部分只能精確到分,使用者希望能夠將小數部分精確到釐、毫。
在票據、落款類報表中,想要直接展示金額、數位的中文大寫形式,而非人民幣形式。
1.2 解決思路
序號 | 範例 | 方案 | 實現效果 |
---|---|---|---|
1 | 轉換為中文大寫 | 方案一: 若您使用的設計器是 11.0.4 以及之後的版本,可以使用 NUMTO 注:NUMTO() 函式不支援小數。 方案二: 1)整數部分可直接透過 Cnmoney 函式進行轉換 2)小數部分組合運用 MAPARRAY、REPLACE 等函式進行更換 3)最後進行連接即可 | 12 的傳回值:壹拾貳 1234.1234 的傳回值:壹仟貳佰叄拾肆點壹貳叄肆 |
2 | 轉換為人名幣大寫(精確到釐、毫 ) | 1)Cnmoney 函式精度範圍內的數字直接透過該函式進行轉換 2)精度外的數字透過 SWITCH、INDEXOF等函式按位取出,單獨進行轉換 3)最後進行連接即可 | 12 的傳回值:壹拾貳圓整 1234.1234 的傳回值:壹仟貳佰叄拾肆圓壹角貳分叄釐肆毫 |
2. 範例
2.1 範本設計
1)建立一張普通報表,右擊任意儲存格(例如A1儲存格),輸入數值1234.123,如下圖所示:
2)選中 B1 儲存格,輸入公式:IF(FIND(".",A1)>0,CONCATENATE(REPLACE(CNMONEY(LEFT(A1, FIND(".", A1) - 1)), "圓整", ""), "點", REPLACE(MAPARRAY(split(mid(A1, FIND(".", A1) 1, 100), ""), SWITCH(item, '0', "零", '1', "壹", '2', "貳", "3", "叄", '4', "肆", "5", "伍", "6", "陸", '7', "柒", '8', "捌", '9', "玖")), ",", "")),REPLACE(CNMONEY(A1),"圓整",""))
,如下圖所示:
公式說明:
公式 | 說明 |
---|---|
FIND(".",A1)>0 | 是否存在小數 |
REPLACE(CNMONEY(LEFT(A1, FIND(".", A1) - 1)), "圓整", "") | 若存在小數,小數點左邊部分透過函式 CNMONEY() 直接轉換為中文 |
REPLACE(MAPARRAY(split(mid(A1, FIND(".", A1) 1, 100), ""), SWITCH(item, '0', "零", '1', "壹", '2', "貳", "3", "叄", '4', "肆", "5", "伍", "6", "陸", '7', "柒", '8', "捌", '9', "玖")), ",", "") | 右邊部分透過函式 MAPARRAY() 將具體每一位數字轉換成杜對應的大寫中文字元 |
CONCATENATE(REPLACE(CNMONEY(LEFT(A1, FIND(".", A1) - 1)), "圓整", ""), "點", REPLACE(MAPARRAY(split(mid(A1, FIND(".", A1) 1, 100), ""), SWITCH(item, '0', "零", '1', "壹", '2', "貳", "3", "叄", '4', "肆", "5", "伍", "6", "陸", '7', "柒", '8', "捌", '9', "玖")), ",", "")) | 左右結果透過函式 CONCATENATE()連接起來 |
REPLACE(CNMONEY(A1),"圓整","") | 若不存在小數,直接透過函式 CNMONEY() 轉換為中文,並去掉人民幣單位即可 |
2.2 效果預覽
儲存範本,選擇分頁預覽,如下圖所示:
2.3 範本下載
已完成範本,可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\function\數字轉換成中文大寫.cpt。
點選下載範本:數字轉換為中文大寫.cpt
3. 範例二:轉換為人民幣大寫(精確到毫)
3.1 範本設計
1)建立一張普通報表,選中任意儲存格(例如 A1 儲存格),輸入數值17.3456,如下圖所示:
2)選中 B1 儲存格,輸入公式:SWITCH(LEN(MID(A1,FIND(".",A1) 1,100)),0,CNMONEY(A1),1,CNMONEY(A1),2,CNMONEY(A1),3,CONCATENATE(CNMONEY(left(A1,LEN(A1)-1)),SWITCH(INDEXOF(A1,
FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐"),4,CONCATENATE(CNMONEY(left(A1,LEN(A1)-2)),,SWITCH(INDEXOF(A1,
FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐" SWITCH(INDEXOF(A1,FIND(".",A1) 3),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆",
"5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "毫"))
,如下圖所示:
公式說明如下:
注:在使用 Cnmoney函式 時,若小數位超過兩位(精度超過分),Cnmoney 函式會對數字四捨五入後再轉人名幣大寫。
公式 | 說明 |
---|---|
LEN(MID(A1,FIND(".",A1) 1,100)) | 判斷小數部分的位數(精度) |
CNMONEY(left(A1,LEN(A1)-1)) | 為防止 Cnmoney 函式四捨五入,僅取出精度範圍內的部分進行轉換 |
SWITCH(INDEXOF(A1,FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐") | 精度外的部分透過 Switch 函式進行轉換:
|
CONCATENATE(CNMONEY(left(A1,LEN(A1)-1)),SWITCH(INDEXOF(A1,FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐") | 透過 CONCATENATE 函式將以上兩步轉換後的內容連接在一起 |
CONCATENATE(CNMONEY(left(A1,LEN(A1)-2)),,SWITCH(INDEXOF(A1,FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐" SWITCH(INDEXOF(A1,FIND(".",A1) 3),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "毫") | 同理可將小數第四位(釐)上的數字轉換為人民幣大寫 |
SWITCH(LEN(MID(A1,FIND(".",A1) 1,100)), 0,CNMONEY(A1), 1,CNMONEY(A1), 2,CNMONEY(A1), 3,CONCATENATE(CNMONEY(left(A1,LEN(A1)-1)),SWITCH(INDEXOF(A1,FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐"), 4,CONCATENATE(CNMONEY(left(A1,LEN(A1)-2)),,SWITCH(INDEXOF(A1,FIND(".",A1) 2),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "釐" SWITCH(INDEXOF(A1,FIND(".",A1) 3),'0',"零",'1',"壹",'2',"貳","3","叄",'4',"肆","5","伍","6","陸",'7',"柒",'8',"捌",'9',"玖") "毫")) | 透過 SWITCH 函式,根據小數部分的位數選擇對應的轉換方式:
|
3.2 效果預覽
儲存範本,選擇分頁預覽,如下圖所示:
3.3 範本下載
點選下載已完成範本:數字轉換為人民幣大寫(精確到毫).cpt