找回密码
 立即注册

QQ登录

只需一步,快速开始

Jeffrey_sun
金牌服务用户   /  发表于:2024-1-29 14:19  /   查看:3229  /  回复:13
本帖最后由 Lynn.Dou 于 2024-3-5 15:59 编辑

产品:GcExcel
版本:6.2.0
编号:DOCXLS-9791
Last Review: 2024/3/5
此问题已于V7.0.4 修复,目前已通过maven发布,建议升级验证下。

问题描述:实际场景中,用户会按照excel的使用习惯来使用spreadjs,比如,在线spreadjs跨sheet复制是会连同条件格式一起复制到目标sheet,以及各种删除删不干净的情况。demo.sjs是提供的一个实例。这个demo.sjs用spreadjs是可以正常打开的,gc用workboot.open也能正常打开,但是workbook.save方法时就会报错。

期望结果: 文件虽然有问题,既然spreadjs能正常打开,gc的open防范也不报错,那gc的save方法是不是也可不报错正常保存呢

GC兼容错误sjs.zip

209.26 KB, 下载次数: 925

13 个回复

倒序浏览
Jeffrey_sun
金牌服务用户   /  发表于:2024-1-29 15:04:40
沙发
SjsSaveOptions options = new SjsSaveOptions();       options.setIncludeStyles(false);
请问一下,这个保存配置怎么用?因为我发现再某些操作下(跨sheet复制,只复制了条件格式),把这个配置项设置成false,再调用save方法就不报错了。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-1-29 17:56:31
板凳
您好,
通过您提供的sjs文件,已复现出GCExcel save时报错的问题。不过对于您描述的 ”在某些操作下(跨sheet复制,只复制了条件格式)“没太理解,可以具体描述下该操作对本贴问题的影响吗?

另,setIncludeStyles 作用是保存文件时是否包含样式:
image.png404483336.png
回复 使用道具 举报
Jeffrey_sun
金牌服务用户   /  发表于:2024-1-29 18:10:02
地板
Lynn.Dou 发表于 2024-1-29 17:56
您好,
通过您提供的sjs文件,已复现出GCExcel save时报错的问题。不过对于您描述的 ”在某些操作下(跨sh ...

大致过程是这样的,我再Sheet2里增加了条件格式,然后从sheet2复制单元格到Sheet1,这是Sheet2中的条件格式会同时被复制到Sheet1,这个时候save方法也会报错,但是我把options.setIncludeStyles(false);设置成false后,就可以save了
回复 使用道具 举报
Jeffrey_sun
金牌服务用户   /  发表于:2024-1-29 18:12:12
5#
另外,Workbook有没有转换成inputStream的方法,我找API没有找到类似的方法
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-1-30 10:26:38
6#
Jeffrey_sun 发表于 2024-1-29 18:10
大致过程是这样的,我再Sheet2里增加了条件格式,然后从sheet2复制单元格到Sheet1,这是Sheet2中的条件格 ...


根据您前面的描述,我的理解为:
如果sjs文件不做复制粘贴条件格式行为,那么GcExcel 执行save方法时不会报错。
如果sjs文件做了复制粘贴条件格式行为,那么GcExcel 执行save方法时才会报错。

所以我做了如下测试:
观察您提供的demo.sjs文件,发现sheet1已经包含了条件格式,所以猜测demo.sjs应是完成复制粘贴条件格式后导出的文件。
我尝试将sheet1中的条件格式删除,再次通过GcExcel做save操作,发现还是会报错的,这与我的预期不一致。


如果说只是想了解save方法报错的具体问题点,那么通过demo.sjs文件已经可以复现了。
如果说是想调研为什么复制粘贴条件格式后save报错,那么还需要您提供以下信息:
1、原始sjs文件(如before.sjs)
2、SpreadJS导入before.sjs后,具体执行了什么样的复制粘贴行为,详细的操作步骤请提供下。
之后SpreadJS导出 after.sjs
3、GcExcel导入 after.sjs 后再做save会报错,提供下报错截图。(预期中,导入before.sjs再做save应不会报错)

综上,只有理解了您的真实需求,才能进一步去调研相应的方案。

另,关于问题2 ”Workbook有没有转换成inputStream的方法
您是想咨询如何将workbook导出为流的形式吗?可以参考下方代码:
  1. FileOutputStream outputStream = new FileOutputStream( "result.sjs");
  2.         workbook.save(outputStream, SaveFileFormat.Sjs);
复制代码


回复 使用道具 举报
Jeffrey_sun
金牌服务用户   /  发表于:2024-1-30 14:41:08
7#
Lynn.Dou 发表于 2024-1-30 10:26
根据您前面的描述,我的理解为:
如果sjs文件不做复制粘贴条件格式行为,那么GcExcel 执行save方法时 ...

问题2:可以忽略,暂时不用管
问题1:第一点,我个人理解不管什么操作,spreadjs能打开,gc的open方法也能正常执行,那workbook的save方法是否也应该正常执行不报错?所以想您确认的是这是否属于gc的bug,是否要修复(我现在的处理方式很粗暴,除了指定的sheet外,其余sheet都执行了条件格式删除,这毕竟是下下策)
第二点的话暂时也可以不考虑,先确认第一点问题
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-1-30 16:50:06
8#
需求了解,问题正在进一步调研中,有进展会在贴中通知。
回复 使用道具 举报
Jeffrey_sun
金牌服务用户   /  发表于:2024-1-31 08:31:03
9#
Lynn.Dou 发表于 2024-1-30 16:50
需求了解,问题正在进一步调研中,有进展会在贴中通知。

好的,感谢
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-1-31 12:24:23
10#
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部