找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

261

帖子

1682

积分

超级版主

Rank: 8Rank: 8

积分
1682
Winny
超级版主   /  发表于:2023-10-30 17:14  /   查看:1510  /  回复:0
本帖最后由 Winny 于 2023-10-31 14:26 编辑

需求背景:
在一些预算、财务系统中。会遇到需要将几个单元格输入得数字合并转换成中文大写字母的需求,如下所示:
506de48d3f18f6c1220688d85f0a05b.png792591857.png

实现方式:
这样的需求,其实对于一些精通Excel的业务人员来说,使用Excel中的公式函数及格式化单元格即可实现。在SpreadJS当中,UI上的实现方式与Excel完全一致。本文会在介绍UI实现得同时,介绍SpreadJS对应的核心api。
根据金额是否包含小数位,我们分两种情况对需求做拆分。
场景一:金额不包含小数点(不包含角分金额)
这种场景实现起来十分简单,结合Excel公式函数及单元格格式化即可实现。具体步骤如下。

步骤1: 单元格设置公式
Excel中,使用连接符"&"可以将多个单元格得值连接起来,SpreadJS同理。以需求背景中的图片为例,对需要显示金额大写得的单元格先应用公式,使得它的值变成多个单元格的连接值。
image.png476479491.png
如上图所示,B2单元格对应的值由I5至Q5连接而成。SpreadJS中对应设置公式得API为:
image.png674219665.png
设置完成之后,B2单元格显示得值如下:
image.png744342651.png
步骤二:将数字转为金额大写字母
Excel中提供了格式化得功能,用于控制单元格的显示效果。将数字转成中文大写字母可以采用Excel中特殊格式,SpreadJS同理。具体UI操作如下:
image.png811927795.png
选择特殊格式下,中文区域的“中文大写字母”即可。设置完成之后,单元格B3显示如下:
image.png738300170.png
此时,更改I5至Q5任意单元格的数字,B2单元的内容也会随之变化。
SpreadJS中设置转中文大写字母对应得API为:setFormular(rowIndex,colIndex,"[DBNum2][$-804]General")
更加详细的API介绍可点击学习指南:设置公式单元格格式化
场景2:金额包含小数位(包含角分)
当金额包含小数时,需要借助一些负责公式来完成角分值的定义。如下如所示,B5单元格为基于I5至S5的值组合产生的结果。
image.png926553649.png
在该示例中,用用得函数主要有concat、trunc、if函数。相关函数得具体含义可以自行搜索学习。
完整可运行示例点击这里跳转查看。



image.png740686950.png
image.png915888671.png
image.png38067320.png
image.png732287902.png

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部