找回密码
 立即注册

QQ登录

只需一步,快速开始

动爸
金牌服务用户   /  发表于:2024-7-12 13:46  /   查看:664  /  回复:7
100金币
本帖最后由 Ellia.Duan 于 2024-7-24 12:14 编辑

spreadjs中如何设置单元格为数值时,不改变用户输入的内容。


场景主要是

用户输入 1.01的时候,能够正常显示,但是输入1.00的时候就可能变成1,如果设置了指定的小数点位数后,输入1.0002又会变成1.00,这样
现在想要的效果是,用户输入什么就是显示什么,跟文本的方式一致,任何时候都不要改变用户输入的内容。
如:同一个单元格中,格式为数值,输入1.00 就显示1.00 输入 1.0000就显示1.0000这样的效果。

最佳答案

查看完整内容

单元格未设置格式时,spreadjs和excel一样,对于输入的一个数字字符串,首先会转换成一个数字值,然后再进行自动格式化 即“1.00”会被转换为1来存储.且在编辑时实际上也是显示的是该实际值所对应的字符串 然后自动格式化(未设置任何格式)或者按照设置的格式字符串来格式化显示 因此你提到的需求没法从产品层面实现,但是基于这个需求,比如按照楼上的建议设置为文本格式,存储一个字符串实际上在spreadjs产品中是可以解决 ...

7 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-7-12 13:46:45
来自 4#
单元格未设置格式时,spreadjs和excel一样,对于输入的一个数字字符串,首先会转换成一个数字值,然后再进行自动格式化
即“1.00”会被转换为1来存储.且在编辑时实际上也是显示的是该实际值所对应的字符串
然后自动格式化(未设置任何格式)或者按照设置的格式字符串来格式化显示

因此你提到的需求没法从产品层面实现,但是基于这个需求,比如按照楼上的建议设置为文本格式,存储一个字符串实际上在spreadjs产品中是可以解决的

spreadjs本身已经对数字字符串的计算做了扩展,支持数字字符串单元格作为公式中的引用来进行数字计算

当然,反过来要考虑和excel的兼容性的话,excel是不支持这一点的。这个是excel的限制了。不是spreadjs的产品能解决的

那么你还可以考虑其他的方式,,比如用value公式
image.png390223082.png


回复 使用道具 举报
eat_grape_5
中级会员   /  发表于:2024-7-12 14:59:00
2#
设置为文本格式就可保持显示内容与输入内容格式一致,楼主的使用场景需要限制单元格内容是数值格式吗?
回复 使用道具 举报
动爸
金牌服务用户   /  发表于:2024-7-12 16:47:18
3#
eat_grape_5 发表于 2024-7-12 14:59
设置为文本格式就可保持显示内容与输入内容格式一致,楼主的使用场景需要限制单元格内容是数值格式吗?

是的,因为涉及相关一部分的公式计算问题,最好保留原来的格式为数值。否则有可能因此造成公式计算的不正确
回复 使用道具 举报
eat_grape_5
中级会员   /  发表于:2024-7-15 12:29:45
5#
动爸 发表于 2024-7-12 16:47
是的,因为涉及相关一部分的公式计算问题,最好保留原来的格式为数值。否则有可能因此造成公式计算的不正 ...

如版主所说SpreadJS支持字符串计算,试了下是ok的。
对于小数点后最后一位是非零值的小数,字符串计算也将保持相同的数值精度。对于小数点后最后一位或最后几位为零值的小数,对单元格设置“数值”格式限定小数点后有效数字位数,数值计算也可以保留其精度。
楼主可以绕道来实现双向的需求了。
回复 使用道具 举报
动爸
金牌服务用户   /  发表于:2024-7-15 16:07:47
6#
eat_grape_5 发表于 2024-7-15 12:29
如版主所说SpreadJS支持字符串计算,试了下是ok的。
对于小数点后最后一位是非零值的小数,字符串计算也 ...

如何实现,能否举例?
回复 使用道具 举报
eat_grape_5
中级会员   /  发表于:2024-7-15 16:31:26
7#
动爸 发表于 2024-7-15 16:07
如何实现,能否举例?

对被引用的单元格和计算公式所在的单元格设置相同的文本格式,这样便能统一计算结果和被计算单元格数值的文本格式一致,即精度一致。至于文本计算,即SpreadJS支持的字符串计算,也就是版主所说的“支持数字字符串单元格作为公式中的引用来进行数字计算”。
如下代码所示为demo:
  1. sheet.setFormatter(0, 0, '#,##0.00');
  2. sheet.setFormatter(0, 1, '#,##0.00');
  3. sheet.setFormula(0, 1, '=SUM(A1, 1)');
复制代码
如下动图所示为上述代码执行的结果:
单元格文本格式计算.gif
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-15 17:53:36
8#
eat_grape_5 发表于 2024-7-15 16:31
对被引用的单元格和计算公式所在的单元格设置相同的文本格式,这样便能统一计算结果和被计算单元格数值的 ...

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部