找回密码
 立即注册

QQ登录

只需一步,快速开始

金成

注册会员

2

主题

4

帖子

10

积分

注册会员

积分
10
  • 253

    金币

  • 2

    主题

  • 4

    帖子

最新发帖
金成
注册会员   /  发表于:2024-4-3 10:52  /   查看:2698  /  回复:7
1金币
本帖最后由 Lynn.Dou 于 2024-4-3 11:45 编辑


调研编号:SJS-23672



dd6390d72ba1832047dfa2440c67292.png97223204.png 75b9d57fabc8a02a249427faba62a5e.png451826171.png 994096e8834a0ba00c8eff48184dab0.png195655211.png
aae8fcb2aa76ea9514347489287cfe4.png850388183.png

最佳答案

查看完整内容

经调研,该问题主要原因如下: 在您进入编辑状态修改单元格值时(比如将"5.0"修改为3),由于单元格并没有设置formatter,SpreadJS会将输入的值3解析为数字,并内部进行数字格式化处理,,应用在单元格text中。 在执行setValue强行修改为原oldValue "5.0"时,单元格内部的数字格式化开始起作用,最终表现为显示text为"5" 综上,此问题背后的本质问题属于产品设计。 根据此前沟通,您截图中的value实际为字符串”5.0“,对于此 ...

7 个回复

正序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-24 11:32:09
8#
没有看到您再回复,这个帖子先结帖了。如果有新的问题,可以发新帖沟通
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-15 17:36:29
7#
请问上述方案能否解决您的问题,如果有需要,请继续回帖沟通
回复 使用道具 举报
金成
注册会员   /  发表于:2024-4-7 14:25:11
5#
Lynn.Dou 发表于 2024-4-3 11:37
您好,
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。

请问调研的进度怎么样了呢?我们月底要发版,麻烦尽快哈。另外,14.1.3升级上来会有问题不?这边只有我一个开发,可能没时间做测试和问题修复呢。。。
回复 使用道具 举报
金成
注册会员   /  发表于:2024-4-7 14:22:09
4#
trace 发表于 2024-4-3 11:25
setValue设置的只是值,并不能设置格式
sheet.getCell(2,1).formatter("0.0").value(5) 可以这样把格式和 ...

为啥设置的字符串,不能保留格式呢,这样好奇怪,重新设置格式感觉会有问题呢。。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-3 11:37:57
3#
您好,
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。
回复 使用道具 举报
trace
初级会员   /  发表于:2024-4-3 11:25:05
2#
本帖最后由 trace 于 2024-4-3 11:27 编辑

setValue设置的只是值,并不能设置格式
sheet.getCell(2,1).formatter("0.0").value(5) 可以这样把格式和值一起写进去。

或者可以先把格式提前设置好,再设置值
sheet.setFormatter(4,4,"0.0");
sheet.setValue(4,4,5);
回复 使用道具 举报
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-4-3 10:52:23
来自 6#
经调研,该问题主要原因如下:
在您进入编辑状态修改单元格值时(比如将"5.0"修改为3),由于单元格并没有设置formatter,SpreadJS会将输入的值3解析为数字,并内部进行数字格式化处理,,应用在单元格text中。
在执行setValue强行修改为原oldValue "5.0"时,单元格内部的数字格式化开始起作用,最终表现为显示text为"5"
综上,此问题背后的本质问题属于产品设计。

根据此前沟通,您截图中的value实际为字符串”5.0“,对于此有个workaround方案,即在setValue之前对值类型做下判断,对于字符串类型数字,给其设置formatter为文本类型 @,以避免受数字格式化的影响。

主要代码如下:
  1. sheet.bind(GC.Spread.Sheets.Events.EditEnding, function (sender, args) {
  2.                 console.log(args);
  3.                 var oldText = sheet.getText(args.row, args.col);
  4.                 var oldValue = sheet.getValue(args.row, args.col);
  5.                 if (args.editingText != oldText) {
  6.                     console.log("值改变了");
  7.                         setTimeout(() => {
  8.                             if(typeof(oldValue) == "string" && !isNaN(Number(oldValue))) {
  9.                                 sheet.getCell(args.row, args.col).value(oldValue).formatter("@");
  10.                             } else {
  11.                                 sheet.getCell(args.row, args.col).value(oldValue);
  12.                             }
  13.                     }, 0);
  14.                     
  15.                 }
  16.             });
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部