找回密码
 立即注册

QQ登录

只需一步,快速开始

BND

高级会员

170

主题

526

帖子

1826

积分

高级会员

积分
1826
BND
高级会员   /  发表于:2022-11-8 15:45  /   查看:3845  /  回复:12
本帖最后由 Ellia.Duan 于 2022-11-10 15:23 编辑

1、这是spreadjs的表格模板。
image.png58158568.png
2、将ssjson传到后端用gcexcel运算,获取有别名的单元格(500多个)的值(excel函数计算),对耗时超1秒的IRange.getValue()进行日志输出

image.png527689513.png
3、在500多次IRange.getValue()中,发现又多次是很耗时的。[size=13.0667px]
测试一:
image.png384210814.png
测试二
image.png667301025.png
最终,在GcExcel中运行一个不包含源表页签数据的空模板,500多次IRange.getValue()[size=13.0667px]的执行总耗时测试一:478秒、测试二515秒,都在8分钟左右。

系统产品设计要求是,有源表页签数据(10w以内)的情况下总耗时不超过5分钟。请问如何优化?

* 源表页签: 指excel函数引用的某些字段对应的页签,这些页签用于纯加载业务源表数据。




评分

参与人数 1金币 +666 收起 理由
Ellia.Duan + 666

查看全部评分

12 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-8 17:44:11
沙发
请上传下您的ssjson文件,以及GCExcel测试代码。
回复 使用道具 举报
BND
高级会员   /  发表于:2022-11-8 19:12:10
板凳
Ellia.Duan 发表于 2022-11-8 17:44
请上传下您的ssjson文件,以及GCExcel测试代码。

测试代码见附件《gcexceldemo.rar》
image.png457234191.png

gcexceldemo.rar

115.57 KB, 下载次数: 302

回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-9 10:30:55
地板
BND 发表于 2022-11-8 19:12
测试代码见附件《gcexceldemo.rar》

代码收到,这边会调研下如何优化,有结果会第一时间通知您。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-9 15:05:23
5#
本帖最后由 Ellia.Duan 于 2022-11-10 15:08 编辑
Ellia.Duan 发表于 2022-11-9 10:30
代码收到,这边会调研下如何优化,有结果会第一时间通知您。

您好,根据您的代码做了一些改动,
改动一:fromJson后,禁用了公式计算
  1. workbook.setEnableCalculation(false);
复制代码
改动二:getRange获取的不是别名,因为禁掉公式计算后,getRange(别名)会报错,所以这里截取了refer这个字符串。
  1. strRange = refer.substring(end+1, refer.length());

  2. range = sheet.getRange(strRange))
复制代码
经过上面的改动后,速度会很快,
最后用时73ms
image.png624973449.png

同时,这边已将此问题报与研发,请研发帮忙可以是否有其他优化方式。[DOCXLS-6979]
具体修改后的文件见附件。

GcExcelTest.java

2.98 KB, 下载次数: 354

回复 使用道具 举报
BND
高级会员   /  发表于:2022-11-10 14:24:35
6#
Ellia.Duan 发表于 2022-11-9 15:05
您好,根据您的代码做了一些改动,
改动一:fromJson后,禁用了公式计算改动二:getRange获取的不是别名 ...

改动一:fromJson后,禁用了公式计算
  • workbook.setEnableCalculation(false);

[color=rgb(137, 92, 220) !important]复制代码

改动二:getRange获取的不是别名,因为禁掉公式计算后,getRange(别名)会报错,所以这里截取了refer这个字符串。
  • strRange = refer.substring(end+1, refer.length());
  • range = sheet.getRange(strRange))

[color=rgb(137, 92, 220) !important]复制代码


进行以上两处改动之后,会导致更严重的问题:无法算出正确值(应该是改动一禁用了公式的原因):
image.png104836730.png


以下没有进行【
改动一、改动二】的结果,如下图:
image.png753738708.png


目的是要在满足设计的性能要求的前提下,
正确的获得有别名的单元格的函数公式算出来的值。




回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-11-10 15:09:35
7#
BND 发表于 2022-11-10 14:24
改动一:fromJson后,禁用了公式计算
  • workbook.setEnableCalculation(false);

  • 问题收到,这边已报给研发调研是否有更好的解决方法,待解决后,第一时间回复您。
    回复 使用道具 举报
    Ellia.DuanSpreadJS 开发认证
    超级版主   /  发表于:2022-11-10 16:52:50
    8#
    您好,经研发团队确认,这个性能问题需要在V5.2.5中修复。待V5.2.5上线后,这边会通知您下载更新。同时这边会为您送上金币,感谢您的反馈。
    回复 使用道具 举报
    BND
    高级会员   /  发表于:2022-11-10 20:33:27
    9#
    Ellia.Duan 发表于 2022-11-10 16:52
    您好,经研发团队确认,这个性能问题需要在V5.2.5中修复。待V5.2.5上线后,这边会通知您下载更新。同时这边 ...

    谢谢。V5.2.5版本有大概的日期么?我们这边在线上用这个功能,用户很关心。
    回复 使用道具 举报
    Ellia.DuanSpreadJS 开发认证
    超级版主   /  发表于:2022-11-11 11:56:48
    10#
    您好,V5.2.5预计在这个月24日发布,这个是个初步估计时间,可以作为参考,以实际发布时间为准。
    还有一个问题想问下您,您这边测试环境上是否有相关问题测试用例,或者在测试环境上没有发现此问题吗?
    回复 使用道具 举报
    12下一页
    您需要登录后才可以回帖 登录 | 立即注册
    返回顶部