找回密码
 立即注册

QQ登录

只需一步,快速开始

BoomPotato

注册会员

5

主题

12

帖子

169

积分

注册会员

积分
169

微信认证勋章

BoomPotato
注册会员   /  发表于:2019-8-26 16:44  /   查看:4047  /  回复:5
image.png449409179.png
通过getRange获取选中区域,通过setBorder设置选中区域中所有单元格的边框,为什么加载速度会很慢,9万条数据,总共81万个单元格左右。
通过getRange获取区域调用setBorder和getCell获取单元格调用setBorder的原理是不是一样的,区域也是遍历所有单元格来实现效果?

5 个回复

正序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-8-27 12:12:09
7#
不客气,感谢您的反馈,本帖结贴了,有新的问题欢迎发新贴交流。
回复 使用道具 举报
BoomPotato
注册会员   /  发表于:2019-8-27 09:11:22
地板
好的,谢谢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-8-27 09:02:29
板凳
要设置所有行高为固定值,那么可以通过sheet.defaults来设置,示例如下:

  1. sheet.suspendPaint();
  2. sheet.defaults.rowHeight = 60;
  3. sheet.resumePaint();
复制代码
回复 使用道具 举报
BoomPotato
注册会员   /  发表于:2019-8-27 08:48:09
沙发
想要设置所有行的高度为固定值,也需要通过遍历,sheet.setRowHeight(i, 16)来设置吗?有设置某一区域所有行高度的方法?
已经设置了sheet.suspendPaint(),我试下整行设置有没有提升。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-8-26 18:46:59
楼主
您好,getRange后调用setBorder的确是遍历所有单元格进行的操作,

这里提供两个优化思路:

1、查看是否执行了sheet.suspendPaint()进行暂停绘制?参考学习指南:

https://demo.grapecity.com.cn/sp ... t/sheetPaint/purejs

2、直接给整行或整列设置边框样式,参考学习指南关于行、列style的描述:

https://demo.grapecity.com.cn/sp ... ksheet/style/purejs

演示代码如下:

  1. var style = new GC.Spread.Sheets.Style();
  2. style.borderLeft =new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  3. style.borderTop = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  4. style.borderRight = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  5. style.borderBottom = new GC.Spread.Sheets.LineBorder("blue",GC.Spread.Sheets.LineStyle.medium);
  6. sheet.setStyle(-1, 5, style);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部