找回密码
 立即注册

QQ登录

只需一步,快速开始

Will1394
金牌服务用户   /  发表于:2023-10-9 16:33  /   查看:1962  /  回复:9
本帖最后由 Richard.Huang 于 2023-10-12 09:58 编辑

产品:GcExcel
版本:V6.2.2

你好,这里的需求是把两个ssjson文件使用copyBefore方法合并成一个ssjson文件,然后保存。(大致代码如下)
其他的ssjson文件合并都没有问题,只有这两个文件在合并的时候会报错,通过debug发现异常是在toJson时发生的,请帮忙看下是什么问题,感谢。
附件中是两个ssjson文件。

image.png425994567.png

image.png162391356.png

image.png916855468.png

土检测报告.ssjson

534.55 KB, 阅读权限: 100, 下载次数: 1

土检测记录表.ssjson

3.07 MB, 阅读权限: 100, 下载次数: 1

9 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-10-9 17:36:51
沙发
您好,执行下文的代码后,并没有报错

  1. Workbook workbook = new Workbook();
  2.         Workbook source_workbook = new Workbook();

  3.         workbook.open("E:\\download\\土检测报告.ssjson");
  4.         source_workbook.open("E:\\download\\土检测记录表.ssjson");

  5.         IWorksheet copy_worksheet = source_workbook.getActiveSheet().copyBefore(workbook.getWorksheets().get(0));
  6.         copy_worksheet.setName("Copy of Home inventory");
  7.         copy_worksheet.activate();

  8.         // Save to an excel file
  9.         workbook.toJson();
复制代码
结果如下:
image.png977914733.png
测试版本:v6.2.2
所以并没有复现您的问题,已将测试文件上传到附件中,您可以修改测试文件来复现问题上传上来,我们根据您上传的文件再复现问题。

Main.java

752 Bytes, 下载次数: 289

回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-10-10 10:57:45
板凳
Ellia.Duan 发表于 2023-10-9 17:36
您好,执行下文的代码后,并没有报错

结果如下:

我这里也在重现中,目前demo无法重现,在业务系统中是必现的,我还在分析,有发现再知会,感谢支持。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-10-10 14:32:12
地板
Will1394 发表于 2023-10-10 10:57
我这里也在重现中,目前demo无法重现,在业务系统中是必现的,我还在分析,有发现再知会,感谢支持。

好的,您如果复现了问题,可以继续跟贴追问。
回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-10-11 16:14:23
5#
本帖最后由 Will1394 于 2023-10-11 16:16 编辑
Ellia.Duan 发表于 2023-10-10 14:32
好的,您如果复现了问题,可以继续跟贴追问。

你好,目前已可以复现,复现的场景有点奇怪

相同的代码,我在main方法中运行的是正常的,在springboot服务启动后接口调用就会出现之前那个数组越界异常(运行至toJson);

94fefbcb9e99ee4d3bec860f5fc3058.png294298705.png

92696ebd54f80fccb2adfe9becda455.png411915587.png

代码如下:
  1. public class GcExcelTest {
  2.     public static void main(String[] args) throws Exception {
  3.         Workbook workbook = new Workbook();
  4.         Workbook source_workbook = new Workbook();


  5.         workbook.open("C:\\Users\\86189\\Downloads\\土检测报告.ssjson");
  6.         source_workbook.open("C:\\Users\\86189\\Downloads\\土检测记录表.ssjson");

  7.         for (int i = source_workbook.getWorksheets().getCount() - 1; i >= 0; i--) {
  8.             IWorksheet copy_worksheet = source_workbook.getWorksheets().get(i).copyBefore(workbook.getWorksheets().get(0));
  9.             copy_worksheet.activate();
  10.         }

  11.         // Save to an excel file
  12.         String json = workbook.toJson();

  13.         FileWriter writer;
  14.         try {
  15.             writer = new FileWriter("C:\\Users\\86189\\Downloads\\exportTest.ssjson");
  16.             writer.write(json);
  17.             writer.flush();
  18.             writer.close();
  19.         } catch (Exception e) {
  20.             e.printStackTrace();
  21.         }
  22.     }}
复制代码

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-10-11 16:39:40
6#
Will1394 发表于 2023-10-11 16:14
你好,目前已可以复现,复现的场景有点奇怪

相同的代码,我在main方法中运行的是正常的,在springbo ...

由于没有您的springboot项目,所以无法复现问题。建议您抽离一份可以复现问题的项目上来,我们调研下原因。
回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-10-19 13:59:53
7#
Ellia.Duan 发表于 2023-10-11 16:39
由于没有您的springboot项目,所以无法复现问题。建议您抽离一份可以复现问题的项目上来,我们调研下原因 ...

这个问题目前已解决,感谢支持;
目前可以确认是数据导致ssjson表格中自定义函数报错引发的,之前一直无法重现是因为测试场景下没有注册自定义函数的代码,所以可以正常copy sheet,系统代码中有注册自定义函数,在合并sheet页时葡萄城组件会运行自定义函数的自定义逻辑,这时的参数和预期有差异,所以就异常了,然后这部分的异常跟copy sheet的错误日志叠在一起,混淆了视线,走了很多弯路

评分

参与人数 1金币 +200 收起 理由
Ellia.Duan + 200 赞一个!

查看全部评分

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-10-19 17:55:54
8#
您的问题解决了就好,也感谢您分享解决经验,稍后会为您送上金币奖励。那本帖就先结贴啦。
回复 使用道具 举报
Will1394
金牌服务用户   /  发表于:2023-10-19 18:06:29
9#
Ellia.Duan 发表于 2023-10-19 17:55
您的问题解决了就好,也感谢您分享解决经验,稍后会为您送上金币奖励。那本帖就先结贴啦。

好的,感谢。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-10-19 18:19:24
10#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部