请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Dtttax

银牌会员

276

主题

683

帖子

2197

积分

银牌会员

积分
2197

[已处理] 效率问题咨询

Dtttax
银牌会员   /  发表于:2019-1-31 16:54  /   查看:3739  /  回复:3
模板的sheet设置了公式引用,比如有公式 ='C3'!B22 还没有C3 sheet这个时候,是无效的公式就设置为0, 如果C3 sheet如果添加了再把公式设置回来。下面这个代码很耗时,如下:   for(let row=1;row<sheet.getRowCount();row++){
      for(let col=0;col<sheet.getColumnCount();col++){
        let cellst=sheet.getCell(row,col)
          let formula=sheet.getFormula(row,col)
          if(formula!=null && formula!="" && formula!=undefined){
                sheet.setFormula(row,col,"=0")
                sheet.setFormula(row,col,formula)
                let formulaRange=GC.Spread.Sheets.CalcEngine.formulaToRanges(sheet, formula,row,col)
                if(formulaRange!=undefined){
                   formulaRange.forEach(item => {
                    let formulasheetname=item.sheetName
                    if(!sheetnames.includes(formulasheetname)){
                        sheet.setFormula(row,col,"=0")
                      }
                  })
               }
           }
        }
    }



3 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-31 17:28:10
沙发
您好,在您执行大量针对表格数据和公式的操作时,

需要先挂起重绘和计算引擎,不然性能会有很大问题,

示例代码:

  1. var spread = GC.Spread.Sheets.findControl("ss");
  2. var sheet = spread.getActiveSheet();
  3. // 挂起绘制
  4. sheet.suspendPaint();
  5. // 挂起计算引擎
  6. sheet.suspendCalcService(false);
  7. // Do your things...

  8. // 恢复计算引擎
  9. sheet.resumeCalcService(true);
  10. // 恢复绘制
  11. sheet.resumePaint();
复制代码
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2019-2-1 10:33:44
板凳
解决了 谢谢
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-2-1 10:57:08
地板
感谢反馈,很高兴解决了您的问题,本帖我结帖了,有新的问题欢迎发新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部