找回密码
 立即注册

QQ登录

只需一步,快速开始

Wilson.Zhang
超级版主   /  发表于:2024-10-31 18:14  /   查看:218  /  回复:0
与Excel可自动扩展sheet中行数不同,SpreadJS默认sheet行数为200。如需扩展,可以通过工具栏“设置”选项卡中“工作表设置”菜单区域手动调整行数,如图1所示,也可以通过Worksheet:setRowCount()设置行数。如上所述,虽然无法自动扩展行数,但是SpreadJS公开了调整行数的操作接口。即便如此,如果用户不清楚这一特点,仍然会影响使用体验。

1730298447(1).png

图1. 设置sheet行数

在以sheet中数据区域为数据源插入数据透视表的使用场景下,如果数据源超过200行,即数据源所在sheet被重置了行数超过默认200行,而数据透视表所在sheet的行数仍然为默认200行,那么,数据透视表所在sheet可能无法完全呈现出透视表所有数据。面对这样的情况,如果SpreadJS支持根据数据量自动扩展行数和列数就好了。然而,事实胜于雄辩,目前暂不支持。那么,还有办法解决这个鸡肋的问题吗?

分析之后,发现SpreadJS内置有PivotTableChanged事件,用以监听数据透视表的变化情况,尝试以这个事件为突破口。具体思路如下:

1. 为Workbook实例注册PivotTableChanged事件,并定义事件处理函数。
2. 在事件处理函数中,获取触发事件的数据透视表所需的区域范围,其中包括有起始行列索引、跨越行列数。
3. 根据数据透视表所需区域范围和当前sheet的总行数,计算需要扩展新增的行数,并据此为sheet重置行数,即可完全展示数据透视表中的所有数据。

上述方案用代码表达如下所示:

  1. var pivotTable = sheet.pivotTables.all()[0];
  2. spread.bind(GC.Spread.Sheets.Events.PivotTableChanged, function(e, args) {
  3.     console.log('pivotTableChanged, args: ', args);
  4.     //  数据透视表所需的区域范围
  5.     var pivotRange = pivotTable.getRange().content;
  6.     console.log('pivotRange: ', pivotRange);
  7.     //  根据数据透视表起始行、sheet页总行数、数据透视表所需行数即可计算得出当前sheet需要新增的行数
  8.     var needAddingRows = pivotRange.rowCount - (sheet.getRowCount() - pivotRange.row);
  9.     console.log('needAddingRows: ', needAddingRows);
  10.     //  重设sheet总行数,以下结果与sheet.getRowCount() + needAddingRows结果一致,因此简化之
  11.     sheet.setRowCount(pivotRange.rowCount + pivotRange.row);
  12. });
复制代码

上述代码运行效果如图2所示,附上demo,以供参考。

数据透视表sheet页自动扩展行数.gif

图2. 数据透视表sheet自动扩展行数


问题原帖:https://gcdn.grapecity.com.cn/showtopic-228490-1-1.html

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部