找回密码
 立即注册

QQ登录

只需一步,快速开始

新雨月

注册会员

4

主题

16

帖子

82

积分

注册会员

积分
82
新雨月
注册会员   /  发表于:2021-5-26 16:49  /   查看:4952  /  回复:15
1金币
本帖最后由 新雨月 于 2021-5-26 17:06 编辑

    需要将单元格进行自定义格式化处理,格式化逻辑较为复杂,不在此讨论。实现过程中发现,单元格套用自定义格式后,数值0在自定义格式的单元格中显示为空。
    排查后发现只要是单元格套用了自定义格式,数值0必然显示为空,无论格式化format方法中的逻辑代码如何定义。

  1. function C(){}
  2. C.prototype = new GC.Spread.Formatter.FormatterBase();
  3. C.prototype.format = function(a){return a;} // 直接返回,不做处理。
  4. spread.getActiveSheet().getRange(0,0,10,1).formatter(new C()); // A列自定义格式,文本0,正常显示
  5. spread.getActiveSheet().getRange(0,1,10,1).formatter(new GC.Spread.Formatter.GeneralFormatter()); // B列默认格式,数值0,正常显示
  6. spread.getActiveSheet().getRange(0,2,10,1).formatter(new C()); // C列自定义格式,数值0,显示为空
复制代码


    如上代码所示,自定义format方法,方法无逻辑处理直接返回值。下图中C列数值0自定义格式化后显示为空,但A列文本0在使用自定义格式后,能正常显示0,且使用默认格式化B列数值0正常显示0。
    image.png406205443.png

    问:如何在使用自定义格式化时,数值0能正常显示。




最佳答案

查看完整内容

问题已复现,这边会做进一步调研,此贴为您改为保留处理,有进展会在本帖更新(SJS-8844) ———————————————————————————————— 经调研,对于Formatter类,它有两个特性。 格式化:将对象格式化为字符串。 解析:将字符串解析为对象。 因此,格式化的结果必须是字符串。因此自定义格式应该参照如下方式。

15 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-5-26 16:49:58
来自 14#
本帖最后由 Derrick.Jiao 于 2021-5-28 11:45 编辑
新雨月 发表于 2021-5-27 09:26
看到帖子状态变成保留处理了,谢谢看一下我刚刚的回复,在demo中依然出现类似问题了。

问题已复现,这边会做进一步调研,此贴为您改为保留处理,有进展会在本帖更新(SJS-8844)
————————————————————————————————
经调研,对于Formatter类,它有两个特性。
格式化:将对象格式化为字符串。
解析:将字符串解析为对象。
因此,格式化的结果必须是字符串。因此自定义格式应该参照如下方式。
  1. function C() { }
  2.         C.prototype = new GC.Spread.Formatter.FormatterBase();
  3.         C.prototype.format = function (a) {
  4.         if(a===null||a===void 0){
  5.             return a;
  6.         }
  7.         return a.toString();
  8.     }
复制代码


回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-26 17:03:51
2#
您好:

image.png59004515.png

如上图所示,B列和C列用的一个样式,是不是写错了?这样写尝试后0是可以正常显示的
回复 使用道具 举报
新雨月
注册会员   /  发表于:2021-5-26 17:05:22
3#
本帖最后由 新雨月 于 2021-5-26 17:06 编辑

哦,写错,抱歉。已修改原文。
  1. spread.getActiveSheet().getRange(0,2,10,1).formatter(new C()); // C列自定义格式,数值0,显示为空
复制代码
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-26 17:12:12
4#
第三列上面有设置其他的内容吗?我这边显示跟您不一样

详细代码见附件demo

modelV14_DEFAULT - 副本.html

1.51 KB, 下载次数: 185

回复 使用道具 举报
新雨月
注册会员   /  发表于:2021-5-26 17:16:42
5#
Clark.Pan 发表于 2021-5-26 17:12
第三列上面有设置其他的内容吗?我这边显示跟您不一样

详细代码见附件demo

没设置其他内容,表单是在官网例子页面上,通过控制台直接添加空白表单后,执行代码后形成的。
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/cells/formatter/basic-formatter/purejs

image.png104655455.png
image.png696727904.png
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-26 17:23:27
6#
image.png680624694.png
抱歉我也在官网上进行重试了,还是没有能够重现你的问题。
能否方便您上传一个demo,我下下来运行一下看看区别
image.png332970580.png
回复 使用道具 举报
新雨月
注册会员   /  发表于:2021-5-26 17:28:38
7#
Clark.Pan 发表于 2021-5-26 17:23
抱歉我也在官网上进行重试了,还是没有能够重现你的问题。
能否方便您上传一个demo,我下下来运行一下看 ...

工作在内网涉密环境,抱歉无法提供样例。
在你给我的demo中修改相关内容,发现可正常显示。
排查版本号,demo中的为14.1.0版本,我们在使用的是14.0.0版本,谢谢看看在14.0.0版本中,该问题是否存在。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-26 17:38:03
8#
新雨月 发表于 2021-5-26 17:16
没设置其他内容,表单是在官网例子页面上,通过控制台直接添加空白表单后,执行代码后形成的。
https:// ...

我刚看了一下,国内这边发布的V14最低版本是V14.0.1,没有V14.0.0这个版本,我用V14.0.1这个版本测试是没有问题的。所以我估计应该是V14.0.0存在bug,后续版本已经修复了。
回复 使用道具 举报
新雨月
注册会员   /  发表于:2021-5-26 17:44:43
9#
Clark.Pan 发表于 2021-5-26 17:38
我刚看了一下,国内这边发布的V14最低版本是V14.0.1,没有V14.0.0这个版本,我用V14.0.1这个版本测试是没 ...

谢谢,我后续试试看升级版本是否解决。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部