找回密码
 立即注册

QQ登录

只需一步,快速开始

gnip
初级会员   /  发表于:5 天前
11#
而且这样如果每次更新带上所有属性,用户如果框选一个区域,批量设置,页面会卡住,根据选中单元格的数量决定卡住的时长,这是不行的
回复 使用道具 举报
eat_grape_5
初级会员   /  发表于:4 天前
12#
本帖最后由 eat_grape_5 于 2024-6-27 10:07 编辑
gnip 发表于 2024-6-26 18:54
而且这样如果每次更新带上所有属性,用户如果框选一个区域,批量设置,页面会卡住,根据选中单元格的数量决 ...

找到一个可行的方法,即控制绘制次数。当表单发生变化时SpreadJS自动刷新,在这样的机制下,当您批量设置报表单元格时,每设置一个都将刷新一次,可在设置前后合理利用挂起绘制与恢复绘制,能够节省一定时间,示例如下:
  1. //  报表模板,spread为当前工作簿
  2. var templateSheet = spread.getSheetTab(0).getTemplateSheet();
  3. function setCellAdvanced(rowStart, colStart, rowCount, colCount) {
  4.     spread.suspendPaint();
  5.     spread.suspendEvent();
  6.     for (var i = rowStart; i < rowCount; i++) {
  7.         for (var j = colStart; j < colCount; j++) {
  8.             templateSheet.setTemplateCell(i, j, {
  9.                 type: 'List',
  10.                 binding: `Orders[orderId]`,
  11.                 autoExpand: 'Vertical',
  12.                 spillMode: 'Overwrite',
  13.                 spillDirection: 'Vertical',
  14.             });
  15.         }
  16.     }
  17.     spread.resumeEvent();
  18.     spread.resumePaint();
  19. }
复制代码


关于挂起绘制与恢复绘制对性能的优化可详细参考官方demo:https://demo.grapecity.com.cn/spreadjs/help/docs/BestPractices/UsingsuspendPaintandresumePaint
回复 使用道具 举报
eat_grape_5
初级会员   /  发表于:4 天前
13#
gnip 发表于 2024-6-26 18:50
所以我问的是有没有方法获取当前单元格所有配置属性的值

获取当前单元格所有已配置属性值的方法是getTemplateCell方法,它返回的结果中包含了所有已经设置的属性,如果希望返回结果中包含未设置属性,那可以基于getTemplateCell方法自定义实现。提供一个思路:
1. 查看官方文档了解报表单元格可支持的属性,整理这个列表,可命名为报表单元格属性列表;
2. 通过getTemplateCell方法获取指定单元格的已设置属性值;
3. 对比getTemplateCell方法的返回结果A中的属性和报表单元格属性列表,从中过滤出未设置的属性,并对未设置属性以默认值形式添加至返回结果A中,作为自定义方法返回值。
回复 使用道具 举报
gnip
初级会员   /  发表于:4 天前
14#
eat_grape_5 发表于 2024-6-27 09:30
找到一个可行的方法,即控制绘制次数。当表单发生变化时SpreadJS自动刷新,在这样的机制下,当您批量设置 ...

这个方法好,确实不卡了,赞
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:4 天前
15#
那本贴就先结贴啦,有问题欢迎发新帖交流。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部