请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

TonyKang

初级会员

11

主题

29

帖子

343

积分

初级会员

积分
343
TonyKang
初级会员   /  发表于:2017-5-8 17:45  /   查看:3501  /  回复:6
您好!

       我现在碰到一个情况,就是在一个cell输出一个字符串值: “00010201”的时候,如果用sheet的setText方法,总是给我截断成"10201",换成 setValue就没有问题,挺让人迷惑的,请问这算不算是个bug?

6 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-8 18:42:31
沙发
这个不是bug,setText方法传入的是formatted text ,也就是说传入的内容默认是经过formatted的,会根据传入数据的类型默认进行formatted,00010201默认会认为是数字,就会默认formartted成10201.
回复 使用道具 举报
TonyKang
初级会员   /  发表于:2017-5-9 09:41:41
板凳
本帖最后由 TonyKang 于 2017-5-9 10:25 编辑

我不认为这样,我考虑到你说的这种情况,尝试过前面加空串: "" + "00010201",也就是说,我是显式地转成String了,不应该给我截断的。
退一步来说,如果这种情况,我应该怎样设置formatter? 因为用户必然会在界面输入这种类似格式的编号。
回复 使用道具 举报
TonyKang
初级会员   /  发表于:2017-5-9 11:13:43
地板
blob616634826.png
blob109851988.png
在实际业务中,会有这样的输入需求,请问该如何处理?(不截断文本)
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-9 13:22:11
5#
TonyKang 发表于 2017-5-9 11:13
在实际业务中,会有这样的输入需求,请问该如何处理?(不截断文本)

首先回答您第一个问题,在javascript中 "" + "00010201"与“00010201”是一样的可以写一个if语句测验一下:
if(""+"00010201"==="00010201"),原因应该是javascript是一个弱类型的语言。所以您那么做仍然会出现问题。
第二对于您的需求,可以使用sheet.setFormatter(9, 6, '00000000')或sheet.getCell(9, 6).formatter('00000000');
其中9,6代表了单元格的rolindex与colindex,  
00000000这里0的个数代表您数字总共的位数。看您的截图里都是8位数字所以用了8个0。
如果不确定数字的位数,那么只能用sheet.setFormatter(9, 6, '@')将其设置为文本格式
回复 使用道具 举报
TonyKang
初级会员   /  发表于:2017-5-10 14:46:00
6#
谢谢! 问题解决。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-5-10 16:17:40
7#
TonyKang 发表于 2017-5-10 14:46
谢谢! 问题解决。

不客气,那么结帖了,有什么问题欢迎另开新帖进行询问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部