找回密码
 立即注册

QQ登录

只需一步,快速开始

王炫皓

中级会员

16

主题

45

帖子

530

积分

中级会员

积分
530
王炫皓
中级会员   /  发表于:2020-7-28 13:55  /   查看:4583  /  回复:8
1金币
增行时会 给新增行动态渲染公式及格式,我在行变更事件中监听 新增行动作,然后给新增行设置公式,这种情况下,右键行号插行或者删行、copyto等操作都会卡顿几秒才可进行操作,
应该如何解决这个问题?
上传的DEMO比较简单所以卡顿时间稍短,也是可以重现的,启动demo后点击【企业提供的资料清单】进行测试
部分代码如下
vm.activeSheet.bind(vm.GC.Spread.Sheets.Events.RowChanged, function(e, eventParams) {
    if (eventParams.propertyName == 'addRows') {
        //停止Excel绘制
    vm.spread.suspendPaint()
        vm.spread.suspendCalcService(false)
        //设置Excel计算公式
        let table = vm.activeSheet.tables.find(eventParams.row, 0)
        vm.packExcelFormula(table, eventParams.row)
        //启动Excel绘制
    vm.spread.resumePaint()
        vm.spread.resumeCalcService(true)
    }
})
image.png18399046.png

yanshi.zip

339.73 KB, 下载次数: 212

最佳答案

查看完整内容

太好了,解决了就行~ 有问题再开新帖交流

8 个回复

正序浏览
王炫皓
中级会员   /  发表于:2020-7-29 18:53:40
8#
Fiooona 发表于 2020-7-29 18:22
需要进一步调研,暂时改为保留处理

已找到原因,同事在设置公式的时候 给设置成了  死循环
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-7-29 18:22:51
7#
需要进一步调研,暂时改为保留处理
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
王炫皓
中级会员   /  发表于:2020-7-29 17:57:41
6#
王炫皓 发表于 2020-7-29 17:55
复件是可以复现的啊,插行时候一顿一顿的,vm.spread.resumeCalcService(true) 是公式影响的

我绑定的表格有50列,20列动态设置了公式,400条数据 插行时候 就会卡顿
先调用 vm.spread.resumeCalcService(false) ,在调用 vm.spread.resumeCalcService(true)
回复 使用道具 举报
王炫皓
中级会员   /  发表于:2020-7-29 17:55:37
5#
Fiooona 发表于 2020-7-28 22:00
问题收到预计明早给您答复-
-------------------------------

复件是可以复现的啊,插行时候一顿一顿的,vm.spread.resumeCalcService(true) 是公式影响的
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-7-28 22:00:37
4#
本帖最后由 Fiooona 于 2020-7-29 17:13 编辑

问题收到预计明早给您答复-
-------------------------------

suspendCalcService 这个方法是暂停计算服务的,暂停绘制是SuspendPaint , 您看是否能提供能复现问题的Demo?我这边在做了上面的修改后没有出现明显的性能问题
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
王炫皓
中级会员   /  发表于:2020-7-28 19:04:57
3#
Fiooona 发表于 2020-7-28 18:46
发现注释掉暂停计算的方法可以明显提升插入行的速度,您可以先注释掉这个方法,具体原因需要在进一步调 ...

这个 方法不用来加速渲染的吗,我有一个10000行的数据 不渲染公式的话能打开,渲染公式 直接就让浏览器的内存溢出了
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-7-28 18:46:05
2#
1595932969(1).jpg

  1.   if (eventParams.propertyName == 'addRows') {
  2.                                 console.time("测试")
  3.                                 //停止Excel绘制
  4.                                vm.spread.suspendPaint()
  5.                              //  vm.spread.suspendCalcService(false)
  6.                                 //设置Excel计算公式
  7.                                 vm.spread.getActiveSheet().setFormula(eventParams.row+1, 0, '[增值税收款(含税)]/(1+[增值税收入(不含税)]')
  8.                                 vm.spread.getActiveSheet().setFormula(eventParams.row+1, 1, '[增值税收款(含税)]/(1+[增值税收入(不含税)]')
  9.                                 vm.spread.getActiveSheet().setFormula(eventParams.row+1, 2, '[增值税收款(含税)]/(1+[增值税收入(不含税)]')
  10.                                 vm.spread.getActiveSheet().setFormula(eventParams.row+1, 3, '[增值税收款(含税)]/(1+[增值税收入(不含税)]')
  11.                                 vm.spread.getActiveSheet().setFormula(eventParams.row+1, 4, '[增值税收款(含税)]/(1+[增值税收入(不含税)]')
  12.                                 //启动Excel绘制
  13.                                vm.spread.resumePaint()
  14.                            //   vm.spread.resumeCalcService(true)
  15.                                 console.timeEnd("测试")

  16.                             }
复制代码
发现注释掉暂停计算的方法可以明显提升插入行的速度,您可以先注释掉这个方法,具体原因需要在进一步调研
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
最佳答案
最佳答案
Fiooona
论坛元老   /  发表于:2020-7-28 13:55:37
来自 9#
太好了,解决了就行~ 有问题再开新帖交流
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部