在日常使用简道云中,很多场景下需要将录入的数字字段的值转换为大写,比如合同中的金额需要转成大写进行打印。(这句话来自帮助文档)
温馨提示
2022-05-11更新中,官方已新增金额大写公式 RMBCAP ( ) ,详见 帮助文档
以下内容现可作为一种公式优化的思路,仅供相互交流学习。
一、现有方法总结
目前可使用的方式有两种,当然也可以说三种:
1、加个文本框,直接自己填上去;
壹、贰、叁、肆、伍、陆、柒、捌、玖、拾
2、抄段公式,对录入的数字进行处理;
帮助文档 https://hc.jiandaoyun.com/blog/11399
3、通过云函数,进行处理。
金额大写云函数 https://bbs.fanruan.com/thread-135653-1-1.html
二、帮助文档公式
方法一、三没什么可说的了,本次来谈下方法二。
近期,因事要用到这个公式,记得帮助文档中有,就查了下,本打算直接拿来用的;
一看,懵了,这个不适用于我这种懒人,每次多达27处需要手动替换。
CONCATENATE("人民币",IF(金额>=0,IF(INT(金额)-金额==0,TEXT(INT(金额),"[Num2]")+"元",IF(INT(金额*10)-金额*10==0,TEXT(INT(金额),"[Num2]")+"元"+TEXT(INT(金额*10)-INT(金额)*10,"[Num2]")+"角",TEXT(INT(金额),"[Num2]")+"元"+TEXT(INT(金额*10)-INT(金额)*10,"[Num2]")+"角"+TEXT(INT(金额*100)-INT(金额*10)*10,"[Num2]")+"分")),IF(INT(金额*-1)-金额*-1==0,"负"+TEXT(INT(金额*-1),"[Num2]")+"元",IF(INT(金额*10*-1)-金额*10*-1==0,"负"+TEXT(INT(金额*-1),"[Num2]")+"元"+TEXT(INT(金额*10*-1)-INT(金额*-1)*10,"[Num2]")+"角","负"+TEXT(INT(金额*-1),"[Num2]")+"元"+TEXT(INT(金额*10*-1)-INT(金额*-1)*10,"[Num2]")+"角"+TEXT(INT(金额*100*-1)-INT(金额*10*-1)*10,"[Num2]")+"分"))))
三、最新优化公式
如果多处使用,想想都可怕,每次都是27次啊,造吧,看看有没有更简单的方式;
还真给摸索出来了,感谢 SPLIT( );
效果及公式如下,仅需要手动替换 4 处或者更少。
效果体验 https://tnvew1vqtq.jiandaoyun.com/f/61816ad243662500074552e3
CONCATENATE(IF(金额<0,"负",""),SPLIT(CONCATENATE(TEXT(INT(SPLIT(TEXT(金额,"[Num0]"),".")[0]),"[Num2]"),"圆",TEXT(INT(SPLIT(SPLIT(TEXT(金额,"[Num0]"),".")[1],"")[0]),"[Num2]"),"角",TEXT(INT(SPLIT(SPLIT(TEXT(金额,"[Num0]"),".")[1],"")[1]),"[Num2]"),"分"),"-"),"整")
四、公式优化思路
1、经测试可发现,通过text()基本已可以得到预想的值,有出入的仅为角和分;
2、那么不妨通过split()基于小数点直接分割成左右两部分,各处理各的,然后拼接起来;
3、左边部分通过text(数值,"[Num2]")即可以得到对应的大写;
4、右边部分继续用split()分割,第一位即是角,第二位即是分;
5、将相应分割出来的数字经text()转为大写,与圆角分拼在一起,即为所要最终大写。
五、更多内容
更多沟通交流可添加微信(zmlnow)
添加时请备注:简道云
都看到这里了
如果您觉得有用
赞一个呗
赏一个呗
偶会更有动力哈 |