找回密码
 立即注册

QQ登录

只需一步,快速开始

杨博

注册会员

11

主题

34

帖子

119

积分

注册会员

积分
119
杨博
注册会员   /  发表于:2021-9-6 13:59  /   查看:2308  /  回复:9
1金币
背景:使用vue+spreadJS开发页面,页面中有导入excel需求,导入是调用后台接口,导入成功后,需要先将页面的数据清除,然后重新获取数据。 image.png412187499.png
问题:在清除当前页面数据的过程中,使用如下图方法清除,如数据785条,需花费时间35s,时间太久,能否有更快速的清除数据的方法?
image.png152542113.png


代码在附件中

spread.vue

20.84 KB, 下载次数: 52

最佳答案

查看完整内容

deleterow可以不用遍历删除,只需给出行索引,并且指定行数,例如sheet.deleteRows(0,sheet.getRowCount()); 若运行速度仍未提升,麻烦您提供一个可运行的demo,这边调研一下。

9 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-6 13:59:45
来自 6#
本帖最后由 Derrick.Jiao 于 2021-9-6 14:36 编辑
杨博 发表于 2021-9-6 14:30
使用clear方法清除的时候,表格行还在,只是数据没了,我要的是delete的那种效果。这是clear的效果

这 ...

deleterow可以不用遍历删除,只需给出行索引,并且指定行数,例如sheet.deleteRows(0,sheet.getRowCount());
若运行速度仍未提升,麻烦您提供一个可运行的demo,这边调研一下。



回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-6 14:12:58
2#
您好,这边有两个方案您可以尝试一下:
1、准备一个空的模板,在需要清除的时候直接fromJSON导入空模板会覆盖原有的数据。

2、用clear方法。例如
sheet.clear(0,0,3,3,GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
下面是claer方法的api
https://demo.grapecity.com.cn/sp ... orksheet.html#clear
在clear前可以用suspend挂起绘制,完成后resume恢复绘制。
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-6 14:12:59
3#
您好,这边有两个方案您可以尝试一下:
1、准备一个空的模板,在需要清除的时候直接fromJSON导入空模板会覆盖原有的数据。

2、用clear方法。例如
sheet.clear(0,0,3,3,GC.Spread.Sheets.SheetArea.viewport,GC.Spread.Sheets.StorageType.data);
下面是claer方法的api
https://demo.grapecity.com.cn/sp ... orksheet.html#clear
在clear前可以用suspend挂起绘制,完成后resume恢复绘制。
回复 使用道具 举报
杨博
注册会员   /  发表于:2021-9-6 14:30:31
4#
Derrick.Jiao 发表于 2021-9-6 14:12
您好,这边有两个方案您可以尝试一下:
1、准备一个空的模板,在需要清除的时候直接fromJSON导入空模板会 ...

使用clear方法清除的时候,表格行还在,只是数据没了,我要的是delete的那种效果。这是clear的效果
image.png422369079.png
这是delete的效果
image.png298619078.png


回复 使用道具 举报
杨博
注册会员   /  发表于:2021-9-6 14:34:50
5#
杨博 发表于 2021-9-6 14:30
使用clear方法清除的时候,表格行还在,只是数据没了,我要的是delete的那种效果。这是clear的效果

这 ...

fromJSON的方法也是这种效果 image.png862412719.png

image.png641741332.png
回复 使用道具 举报
杨博
注册会员   /  发表于:2021-9-6 14:36:47
7#
Derrick.Jiao 发表于 2021-9-6 14:34
deleterow可以不用遍历删除,只需给出行索引,并且指定行数,例如sheet.deleteRows(0,sheet.getRowCount( ...

感谢,确实快了很多
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-6 14:50:04
8#
杨博 发表于 2021-9-6 14:36
感谢,确实快了很多

谢谢支持,本帖子的问题解决,这里就结帖了。       
如果您有新的问题,也欢迎创建新的求助帖。       
请记得设置最佳答案。       
回复 使用道具 举报
杨博
注册会员   /  发表于:2021-9-6 15:55:32
9#
Derrick.Jiao 发表于 2021-9-6 14:34
deleterow可以不用遍历删除,只需给出行索引,并且指定行数,例如sheet.deleteRows(0,sheet.getRowCount( ...

导入之后,页面会出现白屏,也没有报错,排查之后是设置公式这块没走下去。问题:
1、设置公式这里有其他更优化的写法吗?除了这种遍历数据的方法
2、注释内容为啥会导致白屏?


image.png979455566.png


image.png847820129.png
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-6 16:30:12
10#
杨博 发表于 2021-9-6 15:55
导入之后,页面会出现白屏,也没有报错,排查之后是设置公式这块没走下去。问题:
1、设置公式这里有其 ...

您可以设置之前加入也加入spread.suspendCalcService(false);暂停计算
全部设置完之后加入spread.resumeCalcService(true);一并计算重绘。这边你看到您的公式区域是连续的,可以考虑用fillAuto实现,可以参考附件的demo


关于clearPendingChanges这边未能复现您的问题
sheet.clearPendingChanges({clearType: 1, row: -1, rowCount: -1, col: -1, colCount: -1});



另外,如果您有新的问题建议您开一个新帖交流,帖子的楼层越高,会影响回复效率。

online.html

2.11 KB, 下载次数: 44

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部