innerwang 发表于 2023-12-18 14:50:14

如何批量设置连续行的行高

本帖最后由 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 吗?

代码为:



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

Ellia.Duan 发表于 2023-12-18 16:56:44

您好,您试下这行代码,我测试是可以生效的。
      sheet.getRange(0,-1,10,-1).height(200)

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.Duan 发表于 2023-12-18 18:31:28

您好,测试了下,使用上述代码,为5000行区域设置高度用时31ms,如下图所示:

您是觉得这个性能还需要再提升下吗?




innerwang 发表于 2023-12-18 18:36:37

Ellia.Duan 发表于 2023-12-18 18:31
您好,测试了下,使用上述代码,为5000行区域设置高度用时31ms,如下图所示:

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

我这边测试是需要7s, 请问你在测试设置行高之前,有把表单的row 扩充到 5000+行吗?

AlexZ 发表于 2023-12-19 08:24:55

innerwang 发表于 2023-12-18 18:36
我这边测试是需要7s, 请问你在测试设置行高之前,有把表单的row 扩充到 5000+行吗?

可以把你的代码发上来,也可以参考上面给出的示例代码

innerwang 发表于 2023-12-19 09:29:35

AlexZ 发表于 2023-12-19 08:24
可以把你的代码发上来,也可以参考上面给出的示例代码

这个很简单不需要给demo吧,上面的示例明显不对啊,Spread 的sheet 默认200行20列,这个示例没将行数扩充到 5000行以上就去测试设置行高的性能,明显不对吧

Ellia.Duan 发表于 2023-12-19 09:49:03

您好,在16.2.6版本中,在SpreadJS中执行下面的代码,用时52ms

console.time('time')
      sheet.suspendPaint()
      sheet.setRowCount(6000)
      sheet.getRange(0, -1, 5000, -1).height(200)
      sheet.resumePaint()
      console.timeEnd('time')
在Designer中执行相同的步骤,用时12s。

所以您是在Designer中设置的行高吗?
如果是的话,您可以参考下这个优化方案:
1、先设置默认行高
   sheet.defaults.rowHeight = 200;2、为不是200行高的行单独设置行高
      sheet.getRange(5000, -1, 1000, -1).height(70)通过这两行代码实现了前5000行设置行高200,后1000行设置行高70 ,在Designer中用时不到两秒

innerwang 发表于 2023-12-19 10:35:44

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.Duan 发表于 2023-12-19 10:51:10

本帖最后由 Ellia.Duan 于 2023-12-19 12:26 编辑

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


页: [1] 2
查看完整版本: 如何批量设置连续行的行高