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

QQ登录

只需一步,快速开始

so_long

注册会员

2

主题

11

帖子

29

积分

注册会员

积分
29
最新发帖

[已处理] 设置自适应高度 关闭

so_long
注册会员   /  发表于:2024-1-29 16:27  /   查看:757  /  回复:17
10金币
本帖最后由 Richard.Huang 于 2024-1-31 11:39 编辑

产品:SpreadJS
版本:V16.2.6

设置自适应高度后,页面打开的会很慢很慢,要十几二十秒
  1. //自适应高度
  2. const rowCount = this.activeSheet.getRowCount();
  3. for (let row = 0; row < rowCount; row++) {
  4.   this.activeSheet.autoFitRow(row);
  5. }
复制代码

最佳答案

查看完整内容

从您的代码来看,主要原因应该是您的json数据量较大,这种情况下,我们建议不要一次性将所有的单元格的行高都设置自适应,因为自适应行高是要实时计算您单元格中内容的高度然后加上一个阈值后设置在您的单元格上的,在数据量较大的情况下,性能会非常差。您可以考虑仅自适应用户看到的区域,并监听用户的视图滚动,当页面发生变化时,去动态自适应行高。具体实现可以参考这篇技术博客:https://gcdn.grapecity.com.cn/forum.php?mo ...

17 个回复

倒序浏览
最佳答案
最佳答案
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-29 16:28:00
来自 5#
从您的代码来看,主要原因应该是您的json数据量较大,这种情况下,我们建议不要一次性将所有的单元格的行高都设置自适应,因为自适应行高是要实时计算您单元格中内容的高度然后加上一个阈值后设置在您的单元格上的,在数据量较大的情况下,性能会非常差。您可以考虑仅自适应用户看到的区域,并监听用户的视图滚动,当页面发生变化时,去动态自适应行高。具体实现可以参考这篇技术博客:https://gcdn.grapecity.com.cn/fo ... read&tid=143095
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-29 16:54:37
2#
您好,请问您的数据量是多少,如果可以的话,最好能够将您的这份未设置自适应高度的文件提供一下方便我们进行测试和调研,从而给您推荐合适的方案来解决您的问题
回复 使用道具 举报
so_long
注册会员   /  发表于:2024-1-29 17:07:18
3#
Richard.Huang 发表于 2024-1-29 16:54
您好,请问您的数据量是多少,如果可以的话,最好能够将您的这份未设置自适应高度的文件提供一下方便我们进 ...

没有数据的时候,初始化也是很慢的
回复 使用道具 举报
so_long
注册会员   /  发表于:2024-1-29 17:09:49
4#
本帖最后由 Richard.Huang 于 2024-1-31 11:40 编辑
Richard.Huang 发表于 2024-1-29 16:54
您好,请问您的数据量是多少,如果可以的话,最好能够将您的这份未设置自适应高度的文件提供一下方便我们进 ...
  1. initWorkbook() {
  2.   this.$nextTick(() => {
  3.     let el = document.getElementById("excel-container");
  4.     this.workbook = new Workbook(el);
  5.     this.workbook.loadJSON(this.formData.detail, (spread) => {
  6.       this.spread = spread;
  7.       this.activeSheet = spread.getActiveSheet();
  8.       // 取消选中
  9.       spread.getActiveSheet().setActiveCell(null);
  10.       // 滚动条回到顶部
  11.       this.workbook.showCellPosition(this.activeSheet, { row: 0, col: 0 });
  12.       //自适应高度
  13.       const rowCount = this.activeSheet.getRowCount();
  14.       for (let row = 0; row < rowCount; row++) {
  15.         this.activeSheet.autoFitRow(row);
  16.       }
  17.     });
  18.     // 启用表单保护
  19.     const protectionOptions = {
  20.       ...defaultProtectionOptions,
  21.       allowInsertRows: false, // 用户是否可以插入行。
  22.       allowInsertColumns: false, // 用户是否可以插入列。
  23.       allowDeleteRows: false, // 用户是否可以删除行。
  24.       allowDeleteColumns: false, // 用户是否可以删除列。
  25.     };
  26.     // 表单保护
  27.     this.workbook.enableFormProtection(this.activeSheet, protectionOptions);
  28.   });
  29. },
复制代码
这是初始化的时候
回复 使用道具 举报
so_long
注册会员   /  发表于:2024-1-29 20:19:45
6#
Richard.Huang 发表于 2024-1-29 17:37
从您的代码来看,主要原因应该是您的json数据量较大,这种情况下,我们建议不要一次性将所有的单元格的行高 ...

好的,我试试
回复 使用道具 举报
so_long
注册会员   /  发表于:2024-1-30 08:39:44
7#
Richard.Huang 发表于 2024-1-29 17:37
从您的代码来看,主要原因应该是您的json数据量较大,这种情况下,我们建议不要一次性将所有的单元格的行高 ...

我在初始化时调用spread.bind(GC.Spread.Sheets.Events.Scroll, (sender, args) ,但是报错 image.png140608214.png image.png692921142.png
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-1-30 09:23:33
8#
本帖最后由 Ellia.Duan 于 2024-1-30 09:26 编辑
so_long 发表于 2024-1-30 08:39
我在初始化时调用spread.bind(GC.Spread.Sheets.Events.Scroll, (sender, args) ,但是报错

您好,您截图中第666行代码,获取spread对象的方式不对,不能通过designer.spread获取,
正确的代码是:
  1. let spread = designer.getWorkbook()
复制代码
以及,您绑定了Scroll事件,SpreadJS没有Scroll事件
在此https://gcdn.grapecity.com.cn/fo ... read&tid=143095 文中,是监听了TopRowChanged事件
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-31 11:41:08
9#
您好,上面同学提供的方案是否能够解决您的问题?
回复 使用道具 举报
so_long
注册会员   /  发表于:2024-1-31 11:47:05
10#
还在测试,有好几个表格要重新修改
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部