经调研,该问题主要原因如下:
在您进入编辑状态修改单元格值时(比如将"5.0"修改为3),由于单元格并没有设置formatter,SpreadJS会将输入的值3解析为数字,并内部进行数字格式化处理,,应用在单元格text中。
在执行setValue强行修改为原oldValue "5.0"时,单元格内部的数字格式化开始起作用,最终表现为显示text为"5"
综上,此问题背后的本质问题属于产品设计。
根据此前沟通,您截图中的value实际为字符串”5.0“,对于此有个workaround方案,即在setValue之前对值类型做下判断,对于字符串类型数字,给其设置formatter为文本类型 @,以避免受数字格式化的影响。
主要代码如下:
- sheet.bind(GC.Spread.Sheets.Events.EditEnding, function (sender, args) {
- console.log(args);
- var oldText = sheet.getText(args.row, args.col);
- var oldValue = sheet.getValue(args.row, args.col);
- if (args.editingText != oldText) {
- console.log("值改变了");
- setTimeout(() => {
- if(typeof(oldValue) == "string" && !isNaN(Number(oldValue))) {
- sheet.getCell(args.row, args.col).value(oldValue).formatter("@");
- } else {
- sheet.getCell(args.row, args.col).value(oldValue);
- }
- }, 0);
-
- }
- });
复制代码 |