找回密码
 立即注册

QQ登录

只需一步,快速开始

spreadjs666
金牌服务用户   /  发表于:2024-12-6 14:34  /   查看:166  /  回复:10
1金币
【v17】自定义单元格文字溢出时无法不展示文字的问题

场景:当用户A设置了用户B不可见的单元格,用户B需要paint时渲染成绿色单元格并且不展示内容
问题:使用了自定义单元格重写paint后,当内容小于列宽时,文字不展示,当内容大于列宽时,文字溢出并展示
期望:无论列宽大小,文字内容都不展示




image.png459439696.png

问题代码.html

5.54 KB, 下载次数: 11

10 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2024-12-6 17:33:54
沙发
您好!请教下您是否想自定义这样的单元格:在A用户使用时可见数据,且背景色也不是绿色,和其他普通单元格一致;在B用户(即非权限用户)使用时背景色呈绿色,且不显示单元格中的数据。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-12-6 17:38:27
板凳
本帖最后由 spreadjs666 于 2024-12-6 17:39 编辑
Wilson.Zhang 发表于 2024-12-6 17:33
您好!请教下您是否想自定义这样的单元格:在A用户使用时可见数据,且背景色也不是绿色,和其他普通单元格 ...

您好,是的,并且该单元格有value值,因为底层要进行公式的计算和引用。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-6 17:40:23
地板

您现在的进展是可以在怎样的呢?我理解可能有点儿复杂,我需要调研下,请您耐心等候。
回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-12-6 17:49:36
5#
Wilson.Zhang 发表于 2024-12-6 17:40
您现在的进展是可以在怎样的呢?我理解可能有点儿复杂,我需要调研下,请您耐心等候。

您好,我们这个功能已经在测试阶段临近上线了。
因为有自定义单元格的api,所以我们根据api进行了paint的重写,但没发现框架对溢出和非溢出单元格有不同的渲染机制,溢出单元格并没有完全按照paint的规则执行。该问题很紧急,希望能尽快回复,十分感谢。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-6 17:57:05
6#
spreadjs666 发表于 2024-12-6 17:49
您好,我们这个功能已经在测试阶段临近上线了。
因为有自定义单元格的api,所以我们根据api进行了paint ...

理解您的心情,我也需要调研下,之后会及时向您同步结论。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-9 14:31:36
7#
本帖最后由 Wilson.Zhang 于 2024-12-9 14:42 编辑

您好!根据您的描述--”内容大于列宽时,文字溢出并展示“,该现象源于您在代码中相关设置。如下图所示,意味着:当单元格列宽小于其中数值的宽度时,如果其右侧相邻的单元格无数据,则溢出以展示数值全部内容。

1733725356390.png746669006.png

如下图所示,即数字溢出显示效果:
1733725498368.png460648192.png

您提供的demo中的代码,由于上述代码设置才没能隐藏超出单元格宽度的数字,numberFitMode的默认值为mask,该模式下可以满足您的需要。

因此,您可以使用如下代码设置,或者不显式设置numberFitMode,令其保持默认值mask即可。
  1. spread.options.numbersFitMode = GC.Spread.Sheets.NumbersFitMode.mask;
复制代码

另外,如果需要同时隐藏文本字符串,可以对sheet中左右单元格设置文本自动换行,参考如下代码:
  1. sheet.getRange(-1, -1, -1, -1).wordWrap(true);
复制代码


回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-12-9 14:45:51
8#
本帖最后由 spreadjs666 于 2024-12-9 15:20 编辑
Wilson.Zhang 发表于 2024-12-9 14:31
您好!根据您的描述--”内容大于列宽时,文字溢出并展示“,该现象源于您在代码中相关设置。如下图所示,意 ...

您好,感谢回复。关于您提出的两个方案,我们参考了下,发现以下问题:
1、spread.options.numbersFitMode = overflow 是根据用户反馈添加上的,因此我们需要在保持以上配置的前提下让溢出单元格按照自定义单元格的paint执行。
2、sheet.getRange(-1, -1, -1, -1).wordWrap(true); 自动换行应是用户的手动操作,如果我们对用户数据进行修改,会对可见的用户(用户A)产生困扰,导致一旦这个单元格设置了他人不可见,就必须为换行单元格,不太可行。

关于自定义单元格paint溢出情况下无法按照paint的问题,我们目前已经有两个场景都涉及到了此bug:
1、此贴问题
2、超链接paint添加icon时溢出不按paint执行,导致icon消失
image.png161938170.png
image.png226290587.png



希望能给出一个较好的解决方案,供用户可以在溢出的情况下按照自定义的paint执行,感谢。



回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-9 17:43:00
9#
spreadjs666 发表于 2024-12-9 14:45
您好,感谢回复。关于您提出的两个方案,我们参考了下,发现以下问题:
1、spread.options.numbersFitMo ...

您提供的demo中隐藏单元格数据的代码其实是对自定义单元格重写的paint()方法和代码片段末尾的Base.prototype.paint()方法,您重写了paint()方法,且未定义Base.prototype.paint()方法需要执行的逻辑。重写的paint()方法结合numbersFitMode的mask模式可以隐藏数字,结合自动换行可以隐藏长文本字符串。

换言之,如果单元格中的数据宽度超过单元格列宽,溢出效果无法隐藏数据,因为数据内容已经超出了单个单元格的容纳范围。

在numbersFitMode为overflow模式的情况下,如果单元格内容超出了单元格宽度,此时单元格内容无法被隐藏;调整列宽使得单元格宽度超过数据长度时,数据即可被隐藏。同时,也不需要对单元格设置自动换行即可隐藏长文本字符串内容。您可以亲测了解下。

因此,我认为咱们当前讨论的应该是与您的业务强相关的需求,而非SpreadJS的bug。您可以综合考虑下上述信息。

回复 使用道具 举报
spreadjs666
金牌服务用户   /  发表于:2024-12-9 17:56:19
10#
Wilson.Zhang 发表于 2024-12-9 17:43
您提供的demo中隐藏单元格数据的代码其实是对自定义单元格重写的paint()方法和代码片段末尾的Base.protot ...

您好,是否可以理解为框架没有给出方法 供字符串溢出的单元格 重写渲染的入口?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部