请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

BossONE

注册会员

13

主题

26

帖子

91

积分

注册会员

积分
91
BossONE
注册会员   /  发表于:2025-4-11 14:34  /   查看:101  /  回复:4
1金币

屏幕录制 2025-04-11 142224.gif

导入.zip

2.39 MB, 下载次数: 7

4 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-11 16:21:09
沙发
本帖最后由 Ellia.Duan 于 2025-4-11 18:15 编辑

已复现,初步判断是文件内容多,数据透视表多导致的,如下图所示:
image.png361672362.png
至少六个sheet的行数超过百万行。

我们将深入调研下,是否有优化的方案。

同时建议您从业务侧考虑,前端是否要存放如此多的数据,是否可以过滤后返回前端展示。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-14 11:36:11
板凳
本帖最后由 Ellia.Duan 于 2025-4-14 11:41 编辑

1、做了以下测试,删除所有的数据透视表后保存sjs ,导入后仍然崩溃
image.png272817687.png
2、然后尝试将没有超过百万行的sheet  删除,仅保留行数超过百万行的sheet ,保存为sjs ,导入后还是有点慢。
image.png757062072.png
3、此时进行下一步分析,通过getUsedRange获取每一个sheet中'all',  'data',  'formula', 'style'的有效数据区域,如下图所示
image.png86346739.png
通过上图,我们发现,style占据了大部分的行数,但是实际的data区域数量很少。
4、重新导入原始的sjs文件,我们执行下面的代码
  1.     ['all',  'data',  'formula', 'style'].forEach(rangeType => {
  2.         console.log(sheet.name(),rangeType, sheet.getUsedRange(GC.Spread.Sheets.UsedRangeType[rangeType]))
  3.         
  4.     })
  5.     sheet.setRowCount(sheet.getUsedRange(GC.Spread.Sheets.UsedRangeType.data).rowCount)
复制代码
执行结束后,保存一个sjs ,再次导入,发现基本上不会有崩溃的问题,且单元格点击反应很快。

附件中我会把测试中的sjs全部发出来

以及,我们可以通过下面的代码 对sheet的有效数据区域进行分析:
  1.     ['all','axis', 'chart', 'colStyle', 'comment', 'conditionFormat','data', 'dataValidation', 'filter', 'formula', 'picture', 'pivottable', 'rowStyle', 'shape', 'slicer', 'span', 'sparkLine', 'style', 'table'].forEach(rangeType=>{
  2.         console.log(rangeType,sheet.getUsedRange(GC.Spread.Sheets.UsedRangeType[rangeType]))
  3.     })
复制代码


由于浏览器的性能问题,建议针对大文件做一些处理,如删除无意义的数据行,删除无意义的样式行。

不包含多余样式的sheet.sjs

2.42 MB, 下载次数: 7

不包含低于百万行的sheet.sjs

13.48 MB, 下载次数: 6

不包含数据透视表.sjs

13.94 MB, 下载次数: 4

回复 使用道具 举报
BossONE
注册会员   /  发表于:2025-4-14 16:59:16
地板
Ellia.Duan 发表于 2025-4-14 11:36
1、做了以下测试,删除所有的数据透视表后保存sjs ,导入后仍然崩溃

2、然后尝试将没有超过百万行的shee ...

好,我先测试下
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2025-4-14 17:22:28
5#
并不是对所有的文件做上述操作,需要对性能出现问题的文件,做上述操作,清除多余的行,避免删除有用的信息。

而从本质上来说,生成一个sheet ,我们避免对列设置样式。对有效数据区域生成样式。

您可以先测试,有问题随时交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部