找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang
超级版主   /  发表于:2024-10-31 17:56  /   查看:78  /  回复:0
本帖最后由 Wilson.Zhang 于 2024-10-31 20:32 编辑

电子表格可以容纳的数据包括正负数值和其他文本,但是在特定的业务场景,可能不允许在单元格中填充负数,可以通过数据验证阻拦输入负数。即,将数据验证规则设置为小数大于等于0即可。如果在不允许输入负数的同时需要将负数转换为正数,是否还有解决办法。分析下先。

单元格中的数据无论数值和文本,都是字符串,可以从本原的字符串入手,判断从字符串首开始是否存在连续的负号,如果存在则将负号移除,再将其转换为数字即可。同时,需要借助EditEnded事件的支持,在输入完成后方可处理完整的输入数据,如下代码所示。

  1. sheet.bind(GC.Spread.Sheets.Events.EditEnded, function (sender, args) {
  2.     var editingText = args.editingText;
  3.     console.log('editing text: ', editingText);
  4.     // 判断字符串开头是否有一个或多个连续的负号
  5.     var negativeSignRegex = /^(-)+/;
  6.     if (editingText && negativeSignRegex.test(editingText)) {
  7.         // 如果有连续负号,则清除开头的负号
  8.         var newValue = editingText.replace(negativeSignRegex, '');
  9.         // 将新值转换为数字类型
  10.         var numericValue = parseFloat(newValue);
  11.         // 确保保留两位小数并四舍五入
  12.         var roundedValue = Math.round(numericValue * 100) / 100;
  13.         console.log(roundedValue, '值');
  14.         // 更新单元格的显示值
  15.         sheet.setValue(args.row, args.col, roundedValue);
  16.     }
  17. });
复制代码

上述代码执行效果如图1所示。

消除输入数据开头的连续负号.gif

图1. 消除输入数据开头的连续负号

此外,也可通过IF和ABS公式实现。即,通过IF公式判断单元格中的数据是否为负数,如果是负数,则通过ABS公式将负数绝对化为正数,如图2所示。

负数正数化.gif
图2.  负数输入值绝对化





0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部