找回密码
 立即注册

QQ登录

只需一步,快速开始

Dtttax

银牌会员

261

主题

651

帖子

2082

积分

银牌会员

积分
2082
Dtttax
银牌会员   /  发表于:2024-1-3 14:16  /   查看:2307  /  回复:9
200金币
本帖最后由 Richard.Huang 于 2024-1-3 15:20 编辑

导入的excel有一个sheet有3万行26列,在执行spread.fromJson方法时耗时90秒左右,有没有什么办法优化?

最佳答案

查看完整内容

您好,就您所使用的V14版本,目前对于超大文件的导入导出确实存在性能瓶颈,即使采用我们前面讨论的滚动加载或者按需加载的方案,在之后的全量,导入导出中,仍然无法避免存在性能问题。 综上,还是建议尝试升级到V16版本及以上,以sjs文件的方式来进行导入导出操作,测试链接:https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/spreadjs-file-format/overview/purejs

9 个回复

倒序浏览
最佳答案
最佳答案
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-3 14:16:53
来自 9#
Dtttax 发表于 2024-1-16 18:40
超大文件的导入后,保存成ssjon,后续fromjson的时候还是得拿全量的,这里很卡

您好,就您所使用的V14版本,目前对于超大文件的导入导出确实存在性能瓶颈,即使采用我们前面讨论的滚动加载或者按需加载的方案,在之后的全量,导入导出中,仍然无法避免存在性能问题。

综上,还是建议尝试升级到V16版本及以上,以sjs文件的方式来进行导入导出操作,测试链接:https://demo.grapecity.com.cn/sp ... mat/overview/purejs
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-3 15:19:19
2#
我能想到的就只能使用V16新的导入导出功能,导出成.sjs格式进行保存了。.sjs的文件大小与Excel相当,甚至一些时候比Excel本身还要小。
代码实现详情可以参考:https://demo.grapecity.com.cn/sp ... mat/overview/purejs

您可以将您的json导入后导出成sjs文件,再次导入看一下耗时
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2024-1-5 09:19:38
3#
Richard.Huang 发表于 2024-1-3 15:19
我能想到的就只能使用V16新的导入导出功能,导出成.sjs格式进行保存了。.sjs的文件大小与Excel相当,甚至一 ...

不升级的话,可以只加载部分sheet的数据吗
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-5 14:20:57
4#
Dtttax 发表于 2024-1-5 09:19
不升级的话,可以只加载部分sheet的数据吗

您好,这个的话,您可以考虑通过数据绑定来动态加载sheet数据,每次添加多少行,如何进行调度,这需要您自己考虑使用算法来实现。以下是我的一个想法,您可以进行参考:
1. 监听TopRowChanged事件,只要监听到视图区的最上面一行的行号发生改变且满足我需要更新数据的要求我就去动态请求后端问他要接下来的数据
2. 将当前数据和新请求的数据进行组合,然后再setDataSource绑定

附件是我按照在这个思路实现的一个动态滚动加载1w行数据的实现

动态滚动加载1w行数据.rar

1.7 MB, 下载次数: 102

回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2024-1-5 16:17:06
5#
本帖最后由 Dtttax 于 2024-1-5 16:18 编辑
Richard.Huang 发表于 2024-1-5 14:20
您好,这个的话,您可以考虑通过数据绑定来动态加载sheet数据,每次添加多少行,如何进行调度,这需要您 ...

动态加载是不行的,这个不只是看,还要参与其他表单的计算的,只能整个sheet加载。我的意思是,excel有多张表,我只拿几个sheet的数据加载,目前的想法是json里面操作
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-5 17:10:29
6#
Dtttax 发表于 2024-1-5 16:17
动态加载是不行的,这个不只是看,还要参与其他表单的计算的,只能整个sheet加载。我的意思是,excel有多 ...

确实就目前您的版本来讲,只能通过拆分一个完整的工作簿为多个sheet页,您的后端再记录所有sheet的名称,在初次加载时,只加载当前能看到的sheet页,您可以通过sheet.fromJSON()来实现,而其他的sheet页您都是空的,然后监听ActiveSheetChanging事件,在该事件中去问后端请求对应的sheet页的数据,并加载,这其中您需要考虑到是否会有空白工作簿展示的情况,该情况是否要用个遮罩层来阻挡用户知晓,这就是您需要根据具体业务来考虑了
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-16 17:18:37
7#
您好,楼上给出的方案是否可以解决您的问题呢?
回复 使用道具 举报
Dtttax
银牌会员   /  发表于:2024-1-16 18:40:46
8#
Ellia.Duan 发表于 2024-1-16 17:18
您好,楼上给出的方案是否可以解决您的问题呢?

超大文件的导入后,保存成ssjon,后续fromjson的时候还是得拿全量的,这里很卡
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-1-25 14:08:02
10#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部