本帖最后由 Clark.Pan 于 2021-8-2 17:14 编辑
您好,此问题经研发团队沟通调研,结果如下:
此问题本质上是SJS与Excel对于 ”General“格式处理的区别。
您可以测试下,在 Excel 单元格输入日期,并将格式修改为”常规“,此时单元格值将更改为数字。
在SJS中,单元格输入日期,然后将格式修改为”常规“,单元格值将显示为日期。
原因是Excel中,单元格值可以有字符串、数字、布尔值三种数据类型。
要显示日期,它必须是数字+日期格式,一旦将格式更改为常规,单元格将显示数字。
SpreadJS在设计上采用了自动格式化日期的方式,使得常规格式下直接输入 日期值 ,即可渲染为日期。
如果输入的是数字,则需要 数字+日期格式,才可以渲染为日期。
综上,从产品设计考虑,无法修改产品代码逻辑。
关于此问题有个workaround方案,您可以绑定EditEnding 事件,输入日期后修改单元格格式。
代码如下:
- spread.bind(GC.Spread.Sheets.Events.EditEnding, function(e,args) {
- let formatter = args.sheet.getFormatter(args.row, args.col);
- if(formatter&&formatter.toUpperCase() === "GENERAL") {
- args.sheet.setFormatter(args.row, args.col, "");
- }
- });
复制代码
--------------------------------------------------------------------
该问题最新进展(2021/08/02):
确认是产品bug,bug编号:SJS-8968。目前修复难度较大,仍未修复,但已经提供了能够解决问题的workaround,加入下面的事件监听并判断修改formatter
- spread.bind(GC.Spread.Sheets.Events.EditEnding, function(e,args) {
- let formatter = args.sheet.getFormatter(args.row, args.col);
- if(formatter&&formatter.toUpperCase() === "GENERAL") {
- args.sheet.setFormatter(args.row, args.col, "");
- }
- });
复制代码 如有相同问题的同学,目前可以借鉴上面的方法来解决问题。
|