找回密码
 立即注册

QQ登录

只需一步,快速开始

balbo

注册会员

3

主题

9

帖子

193

积分

注册会员

积分
193
最新发帖
balbo
注册会员   /  发表于:2017-2-18 18:00  /   查看:7031  /  回复:11
  1. window.onload = function () {
  2.     var spread = new GcSpread.Sheets.Spread(document.getElementById('ss'), { sheetCount: 1 });
  3.     var sheet = spread.getActiveSheet();
  4.    
  5.     sheet.setRowCount(2005);

  6.     sheet.isPaintSuspended(true);
  7.     sheet.suspendEvent();
  8.     sheet.suspendCalcService();
  9.         
  10.     for (var i = 1; i < 2000; i++) {
  11.         for (var j = 1; j < 21;j++) {
  12.             sheet.setFormula(i, j, 'A1+A'+ (i + 1) + '+' + String.fromCharCode(j + 65) + '1');
  13.         }
  14.     }  

  15.     sheet.resumeCalcService();
  16.     sheet.resumeEvent();
  17.     sheet.isPaintSuspended(false);
  18. };
复制代码




然后再去添加两行:
  1. sheet.isPaintSuspended(true);
  2.     sheet.suspendEvent();
  3.     sheet.suspendCalcService();
  4.    
  5.     sheet.addRows(2, 2);
  6.    
  7.     sheet.resumeCalcService();
  8.     sheet.resumeEvent();
  9.     sheet.isPaintSuspended(false);
复制代码


11 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-2-20 12:11:10
沙发
您好,由于插入行需要调整这行一下所有行的公式,您4万多个公式需要一个一个重新调整,并且调整后还需要重新计算。所以会耗费一定的时间。
这个问题我已经记录并反馈开发人员,看有没有办法能优化一下。
回复 使用道具 举报
balbo
注册会员   /  发表于:2017-2-20 13:02:05
板凳
dexteryao 发表于 2017-2-20 12:11
您好,由于插入行需要调整这行一下所有行的公式,您4万多个公式需要一个一个重新调整,并且调整后还需要重 ...

我看zoho的表格没有这个问题,  微软自己的表格虽然会有点慢 但几秒之后能完成
回复 使用道具 举报
CCKan
银牌会员   /  发表于:2017-2-20 14:42:56
地板
你好,请问这是你们真实的用例吗?
这是由于有 4万多个 单元格引用了 'A1', 调整公式的时候我们需要重新建立依赖关系,由于内部算法的问题,需要执行 Array.splice, 如果数组比较大的时候执行多次 Array.splice 很慢。
而一般情况下,很少会有那么多单元格引用同一个单元格的,所以请问你们的真实用例是什么?如果在你们的真实用例上,这个点还是慢的话我们会针对性的进行性能优化。
回复 使用道具 举报
balbo
注册会员   /  发表于:2017-2-20 15:13:21
5#
CCKan 发表于 2017-2-20 14:42
你好,请问这是你们真实的用例吗?
这是由于有 4万多个 单元格引用了 'A1', 调整公式的时候我们需要重新 ...

真实的数据比这个还大
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-2-20 18:52:17
6#
好的,开发人员回进行测试,看有没有优化方案。
回复 使用道具 举报
balbo
注册会员   /  发表于:2017-2-21 23:26:58
7#
本帖最后由 balbo 于 2017-2-21 23:29 编辑
  1. BaseCalc.prototype.processCellListener = function(cell, isAdd)
  2. {
  3.     var listeners = this.cellListeners;
  4.     if (isAdd)
  5.     {
  6.         var key = `${this.row}_${this.column}_${cell.row}_${cell.column}`;
  7.         cell.key = key;
  8.         listeners[key] = cell;
  9.         this.cellListenersHead = this.cellListenersHead || cell;

  10.         if (this.cellListenersTail) {
  11.             this.cellListenersTail.nextCell = cell;
  12.             cell.prevCell = this.cellListenersTail;
  13.             this.cellListenersTail = cell;
  14.         } else {
  15.             this.cellListenersTail = cell;
  16.         }
  17.     }
  18.     else
  19.     {
  20.         if (cell.prevCell || cell.nextCell) {
  21.             if (cell.prevCell) {
  22.                 cell.prevCell.nextCell = cell.nextCell;
  23.             } else {
  24.                 cell.nextCell.prevCell = cell.prevCell;
  25.             }
  26.             delete listeners[cell.key];
  27.         } else {
  28.             delete listeners[cell.key];
  29.             this.cellListenersHead = null;
  30.             this.cellListenersTail = null;
  31.         }
  32.     }
  33. };
复制代码

把数组改成链表快多了, 不知道会有什么问题
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-2-22 10:49:30
8#
请问您使用的是SpreadJS的哪个版本?
回复 使用道具 举报
balbo
注册会员   /  发表于:2017-2-22 10:57:33
9#
dexteryao 发表于 2017-2-22 10:49
请问您使用的是SpreadJS的哪个版本?

9.40.20161.0
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-2-22 11:22:45
10#

您好,请问您是否购买了我们产品,如果已经购买,请发送邮件至support邮箱沟通。如果没有购买,请问您从何种渠道下载的产品
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部