LuckySheet处理黏贴数据后长数字自动转换为科学计数法并以指定精度删除尾部数据

最近用到luckysheet来处理一个需求,需要从其他地方黏贴数据到luckysheet并提交到后台数据库。但是中间遇到了一个难受的问题,就是luckysheet在黏贴数据后会自动进行格式处理,无论你是否把所有单元格都设置为了text格式(尝试过全选所有区域后设置为纯文本)。所以长数字最终在整个表格内的展示就如以下形式:

点开后可以发现尾部数字已经不同于原本数字:

 

原本数字是:

 

所以这显然是有问题的,入库会出错,不符合要求。

这个问题我直接查遍了文档也没找到设置方法。如果从后端加载数据的话可以自己写死格式,也没问题,但是黏贴这种就不行。

最后没办法只能自己找到源码进行改写。

查看了源码后,个人发现原本的代码对这个处理是统一的,也是不太合理的,做了全局性的强制转换,并不会直接识别复制过来的到底是否是字符串,而是自己进行判断后处理,如果是长段数字,就直接转换处理,事实上不符合日常使用习惯。

具体代码如下:(\Luckysheet\src\global\format.js)

else if(isRealNum(value) && Math.abs(parseFloat(value)) > 0 && (Math.abs(parseFloat(value)) >= 1e+11 || Math.abs(parseFloat(value)) < 1e-9)){
        v = numeral(value).value();
        var str = v.toExponential();
        if(str.indexOf(".") > -1){
            var strlen = str.split(".")[1].split("e")[0].length;
            if(strlen > 5){
                strlen = 5;
            }
//这里做法是直接截断了
            ct = { "fa": "#0."+ new Array(strlen + 1).join("0") +"E+00", "t": "n" }; 
        }
        else{
            ct = { "fa": "#0.E+00", "t": "n" };
        }

        m = SSF.format(ct.fa, v);
    }

 个人对处理过程进行了改写,调整如下:

 else if(isRealNum(value) && Math.abs(parseFloat(value)) > 0 && (Math.abs(parseFloat(value)) < 1e-9)){
        v = numeral(value).value();
        var str = v.toExponential();
        if(str.indexOf(".") > -1){
            var strlen = str.split(".")[1].split("e")[0].length;
            if(strlen > 5){
                strlen = 5;
            }

            ct = { "fa": "#0."+ new Array(strlen + 1).join("0") +"E+00", "t": "n" }; 
        }
        else{
            ct = { "fa": "#0.E+00", "t": "n" };
        }

        m = SSF.format(ct.fa, v);
    }
//将两种长度处理拆开,事实上这部分可以根据自己的需求进行改写,我将自己所需的长整数处理改为字符串处理了
    else if(isRealNum(value) && Math.abs(parseFloat(value)) > 0 && Math.abs(parseFloat(value)) >= 1e+11){
        m = value.toString();
        ct = { "fa": "@", "t": "s" };
    }

 重新编译运行后黏贴结果变正常了,图片如下:

事实上复制黏贴的格式处理都在这一块,如果认为用起来不符合个人要求,可以在里面进行更加精细的改写处理。 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
黏贴数据自动进行格式处理的问题,无论是否将所有单元格设置为文本格式,长数字最终在整个表格内的展示都会出现问题。\[1\]这可能是由于luckysheet处理数据自动将其识别为数值类型,而不是文本类型。在保存数据时,可以使用`window.luckysheet.flowdata()`方法获取当前sheet中的所有数据,并将其打印出来以查看数据结构。\[2\]这样可以更好地了解数据处理方式。 另外,关于在单元格中显示带千分符的数字的问题,使用Luckysheet自带的功能将数字设置为千分符后,保存报表的JSON数据并将其存入数据库。然而,在展示界面中,重新加载JSON数据后,之前设置为千分符的数字并没有显示千分符,而是直接显示数字,格式没有生效。\[3\] 综上所述,对于luckysheet的数值格式处理问题和千分符显示问题,可能需要进一步研究和调试,以找到解决方案。 #### 引用[.reference_title] - *1* [LuckySheet处理黏贴数据后长数字自动转换科学计数法并以指定精度删除尾部数据](https://blog.csdn.net/Elimate0812/article/details/130841847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【已解决】关于 luckysheet 设置纯文本,解决日期格式回显错误的办法](https://blog.csdn.net/weixin_40571965/article/details/129063414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [LuckySheet设置单元格格式为千分符保存至后台再获取时格式失效](https://blog.csdn.net/zy21131437/article/details/121551865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值