找回密码
 立即注册

QQ登录

只需一步,快速开始

innerwang

中级会员

90

主题

364

帖子

920

积分

中级会员

积分
920
innerwang
中级会员   /  发表于:2023-12-18 14:50  /   查看:3704  /  回复:18
本帖最后由 Richard.Huang 于 2024-1-24 12:05 编辑

产品:SpreadJS
问题编号:SJS-21941
LastReview:2024/1/24
该问题已经在V17.0.1中得到修复,可以通过升级版本来解决该问题

想要设置从第 11 - 20 行的行高为 40px, 应该如何写呢?
试了使用 sheet.getRange().height() ,  无法生效,但是 sheet.setRowHeight 单行去设置是可以生效的? 没有批量的 API 吗?

代码为:
image.png202845763.png


如果没有批量的方式,单个行去设置行高有没有性能优化的方案,目前感觉 setRowHeight 性能很差,我在挨个行遍历时,去setValue 以及 setRowHeight,setRowHeight 耗时十分长, 这就导致行数多的时候,就会出现页面卡顿

18 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-18 16:56:44
沙发
您好,您试下这行代码,我测试是可以生效的。
  1.         sheet.getRange(0,-1,10,-1).height(200)
复制代码

image.png926885986.png
回复 使用道具 举报
innerwang
中级会员   /  发表于:2023-12-18 17:10:45
板凳
本帖最后由 innerwang 于 2023-12-18 17:34 编辑
Ellia.Duan 发表于 2023-12-18 16:56
您好,您试下这行代码,我测试是可以生效的。

的确可行,但是这个也是逐行遍历是去设置行高的吗?看起来效率和 setRowHeight 没有区别,我有5000行数据,对这个5000行设置行高,时间要7s, 这个时间太久了,有没有什么优化的方式
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-18 18:31:28
地板
您好,测试了下,使用上述代码,为5000行区域设置高度用时31ms,如下图所示:
image.png181968993.png
您是觉得这个性能还需要再提升下吗?




回复 使用道具 举报
innerwang
中级会员   /  发表于:2023-12-18 18:36:37
5#
Ellia.Duan 发表于 2023-12-18 18:31
您好,测试了下,使用上述代码,为5000行区域设置高度用时31ms,如下图所示:

您是觉得这个性能还需要再 ...

我这边测试是需要7s, 请问你在测试设置行高之前,有把表单的row 扩充到 5000+行吗?
回复 使用道具 举报
AlexZ讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-19 08:24:55
6#
innerwang 发表于 2023-12-18 18:36
我这边测试是需要7s, 请问你在测试设置行高之前,有把表单的row 扩充到 5000+行吗?

可以把你的代码发上来,也可以参考上面给出的示例代码
回复 使用道具 举报
innerwang
中级会员   /  发表于:2023-12-19 09:29:35
7#
AlexZ 发表于 2023-12-19 08:24
可以把你的代码发上来,也可以参考上面给出的示例代码

这个很简单不需要给demo吧,上面的示例明显不对啊,Spread 的sheet 默认200行20列,这个示例没将行数扩充到 5000行以上就去测试设置行高的性能,明显不对吧
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-19 09:49:03
8#
您好,在16.2.6版本中,在SpreadJS中执行下面的代码,用时52ms

  1.   console.time('time')
  2.         sheet.suspendPaint()
  3.         sheet.setRowCount(6000)
  4.         sheet.getRange(0, -1, 5000, -1).height(200)
  5.         sheet.resumePaint()
  6.         console.timeEnd('time')
复制代码
image.png485392150.png
在Designer中执行相同的步骤,用时12s。
image.png306474303.png
所以您是在Designer中设置的行高吗?
如果是的话,您可以参考下  这个优化方案:
1、先设置默认行高
  1.    sheet.defaults.rowHeight = 200;
复制代码
2、为不是200行高的行单独设置行高
  1.       sheet.getRange(5000, -1, 1000, -1).height(70)
复制代码
通过这两行代码实现了前5000行设置行高200,后1000行设置行高70 ,在Designer中用时不到两秒
image.png915767822.png
回复 使用道具 举报
innerwang
中级会员   /  发表于:2023-12-19 10:35:44
9#
Ellia.Duan 发表于 2023-12-19 09:49
您好,在16.2.6版本中,在SpreadJS中执行下面的代码,用时52ms

我是基于 Workbook 创建实例并扩展行数再设置行高的,我使用的SpreadJS 是 16.2.0 版本,在我的项目里是需要 7s, 然后我也为了验证,本地demo了下,只需要2s, 但是也并没有达到52ms 这么少,我先自己本地再复现下,如果能复现7s 的再把demo 发上来。

另外,想问,为什么 designer 和 spread 设置行高的时间差距这么大呢?
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-19 10:51:10
10#
本帖最后由 Ellia.Duan 于 2023-12-19 12:26 编辑

好的,您可以先本地测试一下。同时为您调研 在Designer 和 SpreadJS 中设置行高的时间差距问题。
问题编号:SJS-21941


回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部