找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证

超级版主

43

主题

3222

帖子

4999

积分

超级版主

Rank: 8Rank: 8

积分
4999

SpreadJS 认证SpreadJS 高级认证

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2023-11-26 15:14  /   查看:1602  /  回复:0
本帖最后由 Richard.Huang 于 2023-11-26 15:16 编辑

背景:

大家常常用SpreadJS进行数据的填报和公式的计算。不同行业的用户常常对于计算结果的格式有着十分严格的要求,例如保留计算结果的两位小数。但是近期有用户反馈他们在SpreadJS上设置的保留两位小数在SpreadJS中展示的好好的,但是下载到本地后用Excel打开就不是保留两位小数了。
image.png791806335.png image.png410495604.png

原因:
我们可以通过对比发现,只有AA列的0.4出现了格式失效的问题,而旁边的0.10却按照设定的格式保持着两位小数,于是我们就有了疑问,为什么0.4失效了,而0.1却生效呢。
我们借助getValue方法分别取这两个单元格的值会发现,实际上这个0.4是一个文本类型的值,而0.1是数值类型的值:

image.png915465698.png

在我们SpreadJS中,SpreadJS会自动处理字符串类型的数值内容,按照设置的两位小数格式去展示,但是Excel会十分严格的不去处理字符串类型的数值,因此设置的两位小数格式的单元格对Excel来说不生效。因此造成了该问题。那么为什么这个0.4是文本类型呢?
再深一步调研发现,0.4是经过”=IF(U6="/","/",FIXED((AVERAGE(U6:Z6)-R6),IF(ISERR(FIND(".",$AA$3)),0,LEN($AA$3)-FIND(".",$AA$3)),TRUE))“这个公式计算得出的。在该公式中,除了第一个条件判断外,所有的计算都涉及到字符串的拼接、截取和格式化操作。因此,无论如何设置参数,最终结果都被转换为字符串。

解决办法
我们可以借助Excel的Value公式,将字符串类型的数值转换成数值类型的文本即可:
=VALUE(IF(U6="/","/",FIXED((AVERAGE(U6:Z6)-R6),IF(ISERR(FIND(".",$AA$3)),0,LEN($AA$3)-FIND(".",$AA$3)),TRUE)))

0 个回复

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