找回密码
 立即注册

QQ登录

只需一步,快速开始

rocye

注册会员

8

主题

28

帖子

120

积分

注册会员

积分
120
rocye
注册会员   /  发表于:2020-4-13 17:41  /   查看:2827  /  回复:6
本帖最后由 rocye 于 2020-4-13 17:45 编辑

我们有三张年报表,都在365列以上,行数最大的一张是900行 其它的两张 <100行

我们是直接从后台接口请求到一个二维数组,通过spreadJs创建sheet后setArray到表里面的。

下面这个是三张年表,在没有公式sheetr

image.png66074217.png

这个时间有半分钟左右,但是一旦模板里面有几个sheet引用这三张年表数据做了公式表,那么在setArray时就非常慢,差不多要6-7分钟左右
尝试停止计算服务及渲染,没有任何效果:
workbookInitialized(spread) {
      this.spread = spread
      this.spread.suspendCalcService(false)
      this.spread.suspendPaint()
      // this.spread.options.calcOnDemand = false
      spread.refresh()
}


image.png138463133.png

6 个回复

倒序浏览
Fiooona
论坛元老   /  发表于:2020-4-13 18:30:19
沙发
效率最高的是数据绑定的方式来实现:https://demo.grapecity.com.cn/sp ... able-binding/purejs

spread.suspendPaint()
spread.resumePaint() 这两个是一起使用,没有在您的代码中看到resumePaint
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
rocye
注册会员   /  发表于:2020-4-14 12:32:32
板凳
好的,谢谢版主,昨天晚上又测试过,确实在加载模板和数据之前加上时间会减少,从6分降到了3分钟,我再试下表单绑定会不会有更好的效果
回复 使用道具 举报
rocye
注册会员   /  发表于:2020-4-14 12:34:13
地板
Fiooona 发表于 2020-4-13 18:30
效率最高的是数据绑定的方式来实现:https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/da ...

好的,谢谢版主,昨天晚上又测试过,确实在加载模板和数据之前加上时间会减少,从6分降到了3分钟,我再试下表单绑定会不会有更好的效果
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-4-14 14:08:37
5#
好的,再有问题可以上传个
Demo
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
rocye
注册会员   /  发表于:2020-4-14 14:59:18
6#
Fiooona 发表于 2020-4-14 14:08
好的,再有问题可以上传个
Demo

我用版主说的数据绑定测试了,没有结果,因为完全不出来,时间更长,我是用的官方文档里面的表格绑定,核心代码如下:
const sheet = this.spread.getSheetFromName(sheetName)
      const rowColNums = [sheet.getRowCount(), sheet.getColumnCount()]
      sheet.clear(0, 0, rowColNums[0], rowColNums[1])
      sheet.addRows(0, xyNums[0] + 5)
      sheet.addColumns(0, xyNums[1] + 5)

      var data = { list: dataList }
      var tableColumns = []
      var table = sheet.tables.add('tableRecords', 0, 0, xyNums[0], xyNums[1])
      table.autoGenerateColumns(false)
      colNames.forEach(function(name, index) {
        var tableColumn = new GC.Spread.Sheets.Tables.TableColumn()
        tableColumn.name(name)
        tableColumn.dataField(name)
        tableColumns.push(tableColumn)
      })
      table.bindColumns(tableColumns)
      table.bindingPath('list')
      var source = new GC.Spread.Sheets.Bindings.CellBindingSource(data)
      sheet.setDataSource(source)
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-4-14 17:46:42
7#
看这快代码没有发现有什么问题,需要具体调试下才知道,可以上传一个能复现问题的Demo ,如果有后台数据可以用写死的假数据。
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部