网页端用到自定义JS代码时,如果有大量的sheet.setValue()循环执行时,每次改变内容单元格都会渲染一次,并且会触发满足条件的取数公式,执行效率特别低。

平台依赖的SpreadJS提供了两种优化方式

  1. 禁用页面渲染:

    //内容改变时禁止页面渲染
    sheet.suspendPaint()
    //此处处理大批量改变数据逻辑
    //...
    //处理完毕后恢复页面渲染
    sheet.resumePaint()
  2. 挂起所有事件(如单元格内容改变,选择单元格改变),此方法单独使用提升效率不高

    // 挂起工作表所有事件
    sheet.suspendEvent()
    //此处处理大批量改变数据逻辑
    //...
    //恢复单元格的监听事件
    sheet.resumeEvent()

    两种方法可以分开使用,也可以搭配使用,根据实际情况来判断就好,搭配使用提升效率如下图:

    ①是没有处理之前的速度,②是加了两种方法之后的效率(数据量一样),速度提升了27倍
    另外sheet有多种获取方式,跟VBA中类似

获取当前激活的工作表

sheet = MWE.Obj.getActiveSheet()

获取指定位置工作表

wb = MWE.Obj.getWorkBook()
sheet = wb.getSheet(0) //根据索引获取,第一个sheet为0

获取指定名称工作表

wb = MWE.Obj.getWorkBook()
sheet = wb.getSheetFromName('Sheet1') //按Excel中的名称就行
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。