本帖最后由 Richard.Huang 于 2023-11-26 15:16 编辑
背景:
大家常常用SpreadJS进行数据的填报和公式的计算。不同行业的用户常常对于计算结果的格式有着十分严格的要求,例如保留计算结果的两位小数。但是近期有用户反馈他们在SpreadJS上设置的保留两位小数在SpreadJS中展示的好好的,但是下载到本地后用Excel打开就不是保留两位小数了。
原因:
我们可以通过对比发现,只有AA列的0.4出现了格式失效的问题,而旁边的0.10却按照设定的格式保持着两位小数,于是我们就有了疑问,为什么0.4失效了,而0.1却生效呢。
我们借助getValue方法分别取这两个单元格的值会发现,实际上这个0.4是一个文本类型的值,而0.1是数值类型的值:
在我们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)))
|
|