找回密码
 立即注册

QQ登录

只需一步,快速开始

Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-13 16:18:26
11#
本帖最后由 Joestar.Xu 于 2023-7-21 15:23 编辑

您好,该问题已复现,这边调研一下,后续有进展我会在本贴中回复您。[SJS-19188]

本帖先做保留处理了。
回复 使用道具 举报
观远前端
金牌服务用户   /  发表于:2023-7-13 18:06:34
12#
Joestar.Xu 发表于 2023-7-13 16:18
您好,该问题已复现,这边调研一下,后续有进展我会在本贴中回复您。

本帖先做保留处理了。

所以是什么原因导致的呢? 有没有什么方式能先让我去掉这个 _builtInStyle2 这个样式?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-14 09:55:35
13#
观远前端 发表于 2023-7-13 18:06
所以是什么原因导致的呢? 有没有什么方式能先让我去掉这个 _builtInStyle2 这个样式?

您好,具体原因这边还需要再调研一下,等开发那边调查有进展我会及时将信息同步给您。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-20 10:34:34
14#
您好,这边调研结果如下:

这个问题简单来说,与Excel和SpreadJS Style系统的差异有关。

如果您改变了 SpreadJS 中的某些内容:

将其保存为SpreadJS json或sjs格式,然后导入该ssjson和sjs文件,SpreadJS将确保所有当前状态都将被恢复。

但是,如果将SpreadJS保存到Excel中,则需要在SpreadJS和Excel之间进行大量转换,包括样式转换(将SpreadJS样式系统转换为Excel样式系统)、字体转换等。

我们不能保证导入一个由SpreadJS导出的Excel文件,可以完全恢复SpreadJS保存时的状态,因为我们需要进行另一轮转换,将Excel功能映射到SpreadJS的功能。

这就是为什么在json中,它是一个样式对象,但是一旦导出到Excel,再导入,它就变成了一个字符串名称。

这是因为Excel样式是用共享样式系统设计的,当导出到Excel时,SpreadJS会将SpreadJS样式对象转换为假单元格样式以匹配Excel样式策略。一旦导入了一个Excel文件,SpreadJS就会将Excel共享样式系统转换为SpreadJS命名样式系统,在这个过程中,有很多复杂的逻辑来确保最终的结果与在Excel和SpreadJS中“看到”的结果相同。

回到您的五个步骤上来:

在第二步中,由于这种样式与Excel默认样式完全不同,因此,我们创建一个假单元格XFS节点,然后将该节点指向单元格样式索引。

在第三步中,导入模板文件,需要将Excel样式转换为SpreadJS样式,并且假单元格XFS节点将转换为SpreadJS中的命名样式,并且映射的名称样式将包含Excel默认样式属性,与在第一步中看到的不一样。

在第四步中,样式对象等于Excel默认样式,除了Excel不支持的特性“cellType”,当将此样式转换为Excel样式时,SpreadJS发现它等于默认样式,则不会创建假单元格XFS节点,而是将默认样式单元格XFS节点索引映射到单元格。

在第五步中,工作表的默认样式已经更改,并且单元格没有样式,因此,当您更改工作表前景色时,它可能会受到工作表默认样式的影响。

真实情况比我说的要复杂得多,简单来说,您不应该使用Excel作为SpreadJS序列化和反序列化内容,转换后的Excel可能会破坏不同功能之间的关系。

因此,您应该使用ssjson或sjs文件格式。
回复 使用道具 举报
观远前端
金牌服务用户   /  发表于:2023-7-21 09:51:51
15#
Joestar.Xu 发表于 2023-7-20 10:34
您好,这边调研结果如下:

这个问题简单来说,与Excel和SpreadJS Style系统的差异有关。

对于第二步的问题,我是否可以理解为,由于这个样式不包含默认样式的任何属性,所以才导致异常

如果我在转化为excel 之前,判断单元格有样式且仅描述了cellType,直接将这个样式删掉,或者填充默认样式,是否就可以解决此问题?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-7-21 15:22:37
16#
您好,如上面所述,产生这种差异的根本原因是SpreadJS的一些特性信息在转化过程中丢失,具体是如何丢失的以及产生了哪些影响是一个非常复杂的逻辑,无法定位到具体位置,建议您使用ssjson或sjs文件格式,以确保文件信息的完整性。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部