nqq 发表于 2024-12-5 17:12:06

16.0.1 性能优化

for (let i = 0; i < activeSheet.getRowCount(); i++) {
for (let j = 0; j < activeSheet.getColumnCount(); j++) {
    activeSheet.autoFitRow(i)
}
}这个代码设置后会卡顿有什么方法能替代这种写法呢?

RoyAji 发表于 2024-12-5 17:12:07

只对Row进行autofit,感觉没必要再进行列的遍历了。
如果行列分别需要autoFit,也是分开循环一遍行,再循环一遍列

for (let i = 0; i < activeSheet.getRowCount(); i++) {
    activeSheet.autoFitRow(i)
}
如果再需要列的autoFit

for (let i = 0; i < activeSheet.getColumnCount(); i++) {
    activeSheet.autoFitColumn(i)
}

Wilson.Zhang 发表于 2024-12-5 17:39:20

您好!楼上用户提供的方法可行。

通过您提供的代码片段,了解到您对sheet中所有单元格设置自适应行高。其实每行只需要调用一次activeSheet.autoFitRow()即可对该行所有单元格同步自适应行高。因此,可以优化代码为:
activeSheet.suspendPaint();
for (let i = 0; i < activeSheet.getRowCount(); i++) {
    activeSheet.autoFitRow(i);
}
activeSheet.resumePaint();
for循环语句外的代码为挂起绘制和恢复绘制优化语句,考虑到sheet中可能包含有大量行,那么自适应行高会消耗较多时间,造成卡顿。有了挂起/恢复机制,可以有效解决这种卡顿现象。

nqq 发表于 2024-12-6 11:02:27

RoyAji 发表于 2024-12-5 17:26
只对Row进行autofit,感觉没必要再进行列的遍历了。
如果行列分别需要autoFit,也是分开循环一遍行,再循 ...

好的,谢谢

nqq 发表于 2024-12-6 11:08:59

Wilson.Zhang 发表于 2024-12-5 17:39
您好!楼上用户提供的方法可行。

通过您提供的代码片段,了解到您对sheet中所有单元格设置自适应行高。 ...

好的,谢谢

Joestar.Xu 发表于 2024-12-6 15:21:46

不客气,那就先结贴了,后续有其他问题的话随时开新帖提问哈。

Wilson.Zhang 发表于 2024-12-6 17:06:43

nqq 发表于 2024-12-6 11:08
好的,谢谢

不客气。如有新问题,欢迎发新帖沟通。
:mj72:
页: [1]
查看完整版本: 16.0.1 性能优化