找回密码
 立即注册

QQ登录

只需一步,快速开始

innerwang

高级会员

101

主题

408

帖子

1035

积分

高级会员

积分
1035
innerwang
高级会员   /  发表于:2024-7-26 11:21  /   查看:2401  /  回复:20
1金币
本帖最后由 Wilson.Zhang 于 2024-12-11 14:46 编辑

产品:SpreadJS
版本:17.0.4
调研编号:SJS-26169
Last Review:2024-12-11
当前进展:非问题,Excel文件对未被设置的属性设置默认值。

使用 在线表格编辑器,编辑完模板后,将模板通过 ExcelIO 导出。

编辑模板只做了如下操作:设置单元格的内容及cellType, 同时设置了一下背景色。

将工作簿转化为 json 结果如下
image.png442218627.png

然后将json 转化为 excel。

再次将 excel 导入,查看对应的json
image.png491646117.png
可以看到单元格样式变为了 _builtInStyle2, 同时可以看到一个对应的命名样式,对应的命名样式定义中,包含了设置的 backColor, 同时还有未单独设置的 foreColor

想问的是:
这里为什么要填充默认的 foreColor 呢?
有没有什么方式,只在我特意设置了文字颜色时,才让样式中包含 foreColor 呢,如果没有设置,就不要有值,同时默认颜色可以生效





最佳答案

查看完整内容

您好!我们调研了解到Excel文件并不会认为未被设置的样式属性应该无值,以您的问题场景为例,虽然未对单元格设置foreColor属性,Excel文件的序列化格式Excel XML在记录时会为foreColor属性设置默认值,再将Excel文件导入SpreadJS并序列化为ssjson便看到了foreColor有了默认值。 这是Excel对于本身序列化的设计,不受SpreadJS控制。Excel并非SpreadJS序列化/反序列化的文件格式,SpreadJS支持的序列化/反序列文件格式是.ssjson和 ...

20 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-7-26 11:21:55
来自 19#
您好!我们调研了解到Excel文件并不会认为未被设置的样式属性应该无值,以您的问题场景为例,虽然未对单元格设置foreColor属性,Excel文件的序列化格式Excel XML在记录时会为foreColor属性设置默认值,再将Excel文件导入SpreadJS并序列化为ssjson便看到了foreColor有了默认值。

这是Excel对于本身序列化的设计,不受SpreadJS控制。Excel并非SpreadJS序列化/反序列化的文件格式,SpreadJS支持的序列化/反序列文件格式是.ssjson和.sjs文件,Excel是SpreadJS可以转换的一种文件类型。

我们也不建议修改.ssjson文件中的属性值,因为在版本迭代更新的过程中,.ssjson文件内部结构可能会有变更,如果用户自行修改其内部结构,或许会在高低版本之间无法兼容用户自定义的业务实现。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-26 14:47:31
2#
您好!请问下foreColor属性值当前对您的业务有什么影响?为了便于复现问题,可否提供下与问题相关的json文件?
回复 使用道具 举报
innerwang
高级会员   /  发表于:2024-7-29 10:06:21
3#
Wilson.Zhang 发表于 2024-7-26 14:47
您好!请问下foreColor属性值当前对您的业务有什么影响?为了便于复现问题,可否提供下与问题相关的json文 ...

是这样的,我们想通过给 sheet 设置默认样式,如字体,文字颜色,大小等,来保证 SpreadJS  展示的文字与页面内其他图表一致。

如果单元格上带了 foreColor 或其他样式,那么默认样式就无法生效了。

对应的导出后 excel 文档为
设置了背景色和单元格类型的模板.xlsx.zip (5.07 KB, 下载次数: 476)
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-29 17:10:30
4#
innerwang 发表于 2024-7-29 10:06
是这样的,我们想通过给 sheet 设置默认样式,如字体,文字颜色,大小等,来保证 SpreadJS  展示的文字与 ...

您好!按照您提供的操作流程,先将您提供的.xlsx文件导入至SpreadJS在线表格编辑器后再导出为json格式,发现json文件中存在forecolor属性,猜测这个属性是为了兼容Excel的.xlsx格式文件设置的内容。如果forecolor的值会影响您的业务执行,可以考虑通过forecolor属性的值筛选过滤。顺便了解下您的业务场景为何需要先将模板导出为json格式,再读入导出为Excel文件格式,而后再读取Excel文件呢?您的实际需求是什么?
回复 使用道具 举报
innerwang
高级会员   /  发表于:2024-7-30 13:38:18
5#
本帖最后由 innerwang 于 2024-7-30 13:44 编辑
Wilson.Zhang 发表于 2024-7-29 17:10
您好!按照您提供的操作流程,先将您提供的.xlsx文件导入至SpreadJS在线表格编辑器后再导出为json格式, ...

所以是只能判断 foreColor 是某个值,就认为是个默认值,然后对其处理吗? 这样岂不是需要遍历单元格来处理?

另外我看到 foreColor 还会有“Text 1 0”这种形式, 那我想问的是可以将哪些值作为默认值来处理呢?
image.png824345092.png


我的业务场景是: 先在前端使用在线表格编辑器编辑模板,编辑完后将模板以 excel 的形式保存到后端,然后后端使用 GcExcel 填充模板数据,填充完的内容会保存为一个 excel 文件,然后将这个 excel 文件通过 SpreadJS 在前端展示。

整个前后端交互都是通过 excel 文件进行,不选用其他形式如 ssjson 或 sjs 是有一些其他方面的考虑。


回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-30 15:08:15
6#
innerwang 发表于 2024-7-30 13:38
所以是只能判断 foreColor 是某个值,就认为是个默认值,然后对其处理吗? 这样岂不是需要遍历单元格来处 ...

那就请您尝试下4楼提供的方案,看是否能解决您的问题。
回复 使用道具 举报
innerwang
高级会员   /  发表于:2024-7-30 16:21:39
7#
Wilson.Zhang 发表于 2024-7-30 15:08
那就请您尝试下4楼提供的方案,看是否能解决您的问题。

四楼是指下图红框里的这个方案?
image.png178706053.png

我在前面也问了如下两个问题,麻烦先回复一下哈
image.png879150390.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-7-30 18:10:55
8#
innerwang 发表于 2024-7-30 16:21
四楼是指下图红框里的这个方案?

您好!回答您的问题:
问题一:四楼方案指的就是红框里的内容。
问题二:我理解是需要遍历单元格或者json文件。
问题三:我理解关于foreColor属性的过滤规则由用户自定义。

关于您的原始问题,我需要再调研一下,之后给您答复。
回复 使用道具 举报
innerwang
高级会员   /  发表于:2024-7-31 09:41:33
9#
本帖最后由 innerwang 于 2024-7-31 10:43 编辑
Wilson.Zhang 发表于 2024-7-30 18:10
您好!回答您的问题:
问题一:四楼方案指的就是红框里的内容。
问题二:我理解是需要遍历单元格或者js ...

对于问题三的回复:转化为excel时针对单元格样式填充了默认的 foreColor及其他内容 ,所以是否可以告知默认填充 foreColor 及 font的规则是什么?这样方便我这边针对性的定义过滤规则
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部