应对 SpreadJS 数据透视表行数限制的策略及实现
与Excel可自动扩展sheet中行数不同,SpreadJS默认sheet行数为200。如需扩展,可以通过工具栏“设置”选项卡中“工作表设置”菜单区域手动调整行数,如图1所示,也可以通过Worksheet:setRowCount()设置行数。如上所述,虽然无法自动扩展行数,但是SpreadJS公开了调整行数的操作接口。即便如此,如果用户不清楚这一特点,仍然会影响使用体验。图1. 设置sheet行数
在以sheet中数据区域为数据源插入数据透视表的使用场景下,如果数据源超过200行,即数据源所在sheet被重置了行数超过默认200行,而数据透视表所在sheet的行数仍然为默认200行,那么,数据透视表所在sheet可能无法完全呈现出透视表所有数据。面对这样的情况,如果SpreadJS支持根据数据量自动扩展行数和列数就好了。然而,事实胜于雄辩,目前暂不支持。那么,还有办法解决这个鸡肋的问题吗?
分析之后,发现SpreadJS内置有PivotTableChanged事件,用以监听数据透视表的变化情况,尝试以这个事件为突破口。具体思路如下:
1. 为Workbook实例注册PivotTableChanged事件,并定义事件处理函数。
2. 在事件处理函数中,获取触发事件的数据透视表所需的区域范围,其中包括有起始行列索引、跨越行列数。
3. 根据数据透视表所需区域范围和当前sheet的总行数,计算需要扩展新增的行数,并据此为sheet重置行数,即可完全展示数据透视表中的所有数据。
上述方案用代码表达如下所示:
var pivotTable = sheet.pivotTables.all();
spread.bind(GC.Spread.Sheets.Events.PivotTableChanged, function(e, args) {
console.log('pivotTableChanged, args: ', args);
//数据透视表所需的区域范围
var pivotRange = pivotTable.getRange().content;
console.log('pivotRange: ', pivotRange);
//根据数据透视表起始行、sheet页总行数、数据透视表所需行数即可计算得出当前sheet需要新增的行数
var needAddingRows = pivotRange.rowCount - (sheet.getRowCount() - pivotRange.row);
console.log('needAddingRows: ', needAddingRows);
//重设sheet总行数,以下结果与sheet.getRowCount() + needAddingRows结果一致,因此简化之
sheet.setRowCount(pivotRange.rowCount + pivotRange.row);
});
上述代码运行效果如图2所示,附上demo,以供参考。
图2. 数据透视表sheet自动扩展行数
问题原帖:https://gcdn.grapecity.com.cn/showtopic-228490-1-1.html
页:
[1]