SpreadJS如何解决负数输入限制及转换的方案探讨
本帖最后由 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.负数输入值绝对化
问题原帖:https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=227745&pid=845088&page=1&extra=#pid845088
页:
[1]