本帖最后由 Wilson.Zhang 于 2024-10-31 20:32 编辑
电子表格可以容纳的数据包括正负数值和其他文本,但是在特定的业务场景,可能不允许在单元格中填充负数,可以通过数据验证阻拦输入负数。即,将数据验证规则设置为小数大于等于0即可。如果在不允许输入负数的同时需要将负数转换为正数,是否还有解决办法。分析下先。
单元格中的数据无论数值和文本,都是字符串,可以从本原的字符串入手,判断从字符串首开始是否存在连续的负号,如果存在则将负号移除,再将其转换为数字即可。同时,需要借助EditEnded事件的支持,在输入完成后方可处理完整的输入数据,如下代码所示。
- sheet.bind(GC.Spread.Sheets.Events.EditEnded, function (sender, args) {
- var editingText = args.editingText;
- console.log('editing text: ', editingText);
- // 判断字符串开头是否有一个或多个连续的负号
- var negativeSignRegex = /^(-)+/;
- if (editingText && negativeSignRegex.test(editingText)) {
- // 如果有连续负号,则清除开头的负号
- var newValue = editingText.replace(negativeSignRegex, '');
- // 将新值转换为数字类型
- var numericValue = parseFloat(newValue);
- // 确保保留两位小数并四舍五入
- var roundedValue = Math.round(numericValue * 100) / 100;
- console.log(roundedValue, '值');
- // 更新单元格的显示值
- sheet.setValue(args.row, args.col, roundedValue);
- }
- });
复制代码
上述代码执行效果如图1所示。
图1. 消除输入数据开头的连续负号
此外,也可通过IF和ABS公式实现。即,通过IF公式判断单元格中的数据是否为负数,如果是负数,则通过ABS公式将负数绝对化为正数,如图2所示。
图2. 负数输入值绝对化
|