找回密码
 立即注册

QQ登录

只需一步,快速开始

innerwang

中级会员

90

主题

364

帖子

920

积分

中级会员

积分
920
innerwang
中级会员   /  发表于:2024-10-16 09:44  /   查看:321  /  回复:6
1金币
本帖最后由 Joestar.Xu 于 2024-10-21 11:15 编辑


调研编号:SJS-26925

原始数据如下:
image.png928124694.png
对应的模板如下,D列会在模板前加一个负号
image.png70303954.png

其中 B 列设置数据格式为展示2位小数,C和D 设置数据格式为展示3位小数

将数据和模板,通过 GcExcel 处理,得到的填充完数据的文件如下
最后一列是富文本.xlsx.zip (9 KB, 下载次数: 9)

最佳答案

查看完整内容

您好,经调研,出现此情况的原因是因为SpreadJS的Formatter会尝试将一个字符串格式化为另一个字符串,由于历史原因,我们无法修改此处的逻辑,否则会带来严重的Break Change。 因此,为了解决这个问题,您可以参考以下代码来作为Workaround:

6 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-16 09:44:11
来自 3#
您好,经调研,出现此情况的原因是因为SpreadJS的Formatter会尝试将一个字符串格式化为另一个字符串,由于历史原因,我们无法修改此处的逻辑,否则会带来严重的Break Change。

因此,为了解决这个问题,您可以参考以下代码来作为Workaround:

  1. var formatFn = GC.Spread.Formatter.GeneralFormatter.prototype.format;
  2. GC.Spread.Formatter.GeneralFormatter.prototype.format = function (val) {
  3.     var formatter = this.formatString();
  4.     if (typeof val === 'string' && (formatter.indexOf("0") || formatter.indexOf("#"))) {
  5.         return val;
  6.     }
  7.     return formatFn.apply(this, arguments);
  8. }
复制代码
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-16 16:33:17
2#
您好,您描述的情况我了解了,这边调研一下,后续有进展我会在本贴中回复您。
回复 使用道具 举报
innerwang
中级会员   /  发表于:2024-10-21 16:23:14
4#
Joestar.Xu 发表于 2024-10-21 14:13
您好,经调研,出现此情况的原因是因为SpreadJS的Formatter会尝试将一个字符串格式化为另一个字符串,由于 ...

但是这样处理后,在单元格输入内容时,没法自动变为数字了吧?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-22 09:08:06
5#
这一段代码是会修改原来format的逻辑,不排除您说的可能会导致自动format的结果和之前的逻辑结果不一致的情况。
回复 使用道具 举报
innerwang
中级会员   /  发表于:2024-10-31 18:29:12
6#
Joestar.Xu 发表于 2024-10-22 09:08
这一段代码是会修改原来format的逻辑,不排除您说的可能会导致自动format的结果和之前的逻辑结果不一致的情 ...

好的,收到
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-11-1 11:56:12
7#
好的,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部