找回密码
 立即注册

QQ登录

只需一步,快速开始

nutstore
金牌服务用户   /  发表于:2021-6-11 15:01  /   查看:3445  /  回复:4
本帖最后由 Clark.Pan 于 2021-8-2 17:12 编辑

在官网复现的流程:
Kapture 2021-06-11 at 14.57.03.gif

用到的 excel 文件:
bug5.xlsx (8.67 KB, 下载次数: 253)

评分

参与人数 1金币 +1000 收起 理由
Clark.Pan + 1000 感谢您对产品提出有帮助的反馈

查看全部评分

4 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-7-20 14:22:47
推荐
本帖最后由 Clark.Pan 于 2021-8-2 17:14 编辑

您好,此问题经研发团队沟通调研,结果如下:

此问题本质上是SJS与Excel对于 ”General“格式处理的区别。
您可以测试下,在 Excel 单元格输入日期,并将格式修改为”常规“,此时单元格值将更改为数字。
在SJS中,单元格输入日期,然后将格式修改为”常规“,单元格值将显示为日期。
原因是Excel中,单元格值可以有字符串、数字、布尔值三种数据类型。
要显示日期,它必须是数字+日期格式,一旦将格式更改为常规,单元格将显示数字。
SpreadJS在设计上采用了自动格式化日期的方式,使得常规格式下直接输入 日期值 ,即可渲染为日期。
如果输入的是数字,则需要 数字+日期格式,才可以渲染为日期。
综上,从产品设计考虑,无法修改产品代码逻辑。

关于此问题有个workaround方案,您可以绑定EditEnding 事件,输入日期后修改单元格格式。
代码如下:
  1. spread.bind(GC.Spread.Sheets.Events.EditEnding, function(e,args) {
  2.        let formatter = args.sheet.getFormatter(args.row, args.col);
  3.        if(formatter&&formatter.toUpperCase() === "GENERAL") {
  4.             args.sheet.setFormatter(args.row, args.col, "");
  5.        }
  6. });
复制代码


--------------------------------------------------------------------
该问题最新进展(2021/08/02):
确认是产品bug,bug编号:SJS-8968。目前修复难度较大,仍未修复,但已经提供了能够解决问题的workaround,加入下面的事件监听并判断修改formatter
  1. spread.bind(GC.Spread.Sheets.Events.EditEnding, function(e,args) {
  2.     let formatter = args.sheet.getFormatter(args.row, args.col);
  3.     if(formatter&&formatter.toUpperCase() === "GENERAL") {
  4.         args.sheet.setFormatter(args.row, args.col, "");
  5.     }
  6. });
复制代码
如有相同问题的同学,目前可以借鉴上面的方法来解决问题。






回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-11 15:18:02
沙发
您好,此问题不是bug,这个文件导入SJS中,单元格格式为 “常规”,被自动格式化为日期。此时导出的Excel文件中,此单元格格式也为“常规”,Excel对于常规格式的日期就会展示为一串数字。

如下图,将单元格修改为 日期格式即可:
此时导出显示为日期。
image.png759056091.png



具体您可以参考此篇技术博客,里面做了详细的说明。
https://gcdn.grapecity.com.cn/fo ... 3&fromuid=59119




回复 使用道具 举报
nutstore
金牌服务用户   /  发表于:2021-6-11 15:38:28
板凳
Lynn.Dou 发表于 2021-6-11 15:18
您好,此问题不是bug,这个文件导入SJS中,单元格格式为 “常规”,被自动格式化为日期。此时导出的Excel文 ...

我认为这个就属于 bug,因为你渲染的时候是日期,如果说因为格式问题,那渲染的时候也应该渲染成数字,这里面两个功能,渲染和导出,一定有一个是有问题的。

另外,导出后再导入,仍然是数字,如果有 “自动格式化” 的话,为什么没在导入的时候工作。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-6-11 16:44:20
地板
本帖最后由 Lynn.Dou 于 2021-6-11 17:54 编辑

您的疑问是有道理的,这边将此问题记录下来反馈给研发,
如果确认为bug,将会在之后的版本中修复。
本贴先做保留处理。(SJS-8968)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部