【17.0.8】【不能插入两百行的数据透视表,显示不全】
本帖最后由 Wilson.Zhang 于 2024-12-3 12:28 编辑产品:SpreadJS
版本:17.0.8
调研编号:SJS-27092
Last Review:2024-12-03
当前进展:非功能问题,保留当前设计。
1、新建sheet页有400行不重复的数据
2、选中全部数据新建数据透视表
3、拖拽显示全部行数据,最大只能显示两百条数据
天涯路远 发表于 2024-10-28 11:50
1、这个行为跟Excle不一致,2、而且插入数据透视表应该是组件的行为,数据处理应该是组件去处理,让我们 ...
Excel中sheet页的行数可以自动扩展,最大行数限制为1048576行。然而,SpreadJS保留了自己的设计,即默认行数为200行,如果数据量超过初始行数,需要通过Worksheet:setRowCount()设置以扩展行数。
关于您的问题,SpreadJS提供了PivotTableChanged事件以监听数据透视表的结构变化,当通过右侧设置面板拖拽字段至数据透视表中时即可触发该事件。此时,根据数据透视表的数据所跨越的行数和当前sheet的总行数之间的差距,重新设置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);
});
您好!SpreadJS的Worksheet默认有200行,如果透视表所在sheet和数据源所在sheet是两个sheet,需要为透视表所在sheet设置行数大于等于400行。 Wilson.Zhang 发表于 2024-10-28 08:28
您好!SpreadJS的Worksheet默认有200行,如果透视表所在sheet和数据源所在sheet是两个sheet,需要为透视表 ...
1、这个行为跟Excle不一致,2、而且插入数据透视表应该是组件的行为,数据处理应该是组件去处理,让我们手动去设置我觉得不太合理 Wilson.Zhang 发表于 2024-10-28 16:22
Excel中sheet页的行数可以自动扩展,最大行数限制为1048576行。然而,SpreadJS保留了自己的设计,即默认 ...
:(这个不应该做到组件里面吗?我理解 天涯路远 发表于 2024-10-30 10:11
这个不应该做到组件里面吗?我理解
很抱歉,理解您的使用期望。当前的产品无法自动扩展行数,粘贴时倒是可以通过设置allowExtendPasteRange属性为true实现自动扩展行数。未来可能会增强功能,当前您可以参考在4楼给您提供的workaround使用。 我们也反馈了这个功能,调研编号为SJS-27092,之后会向您及时同步结论。目前,如之前所言,您可以参考在4楼给您提供的workaround使用。 您好!经确认,保留当前设计,未来尚不确定是否会增强这个功能,当前建议您参考之前告诉您的方案使用。同时又了解到一种新方案,也是通过扩展数据透视表所在sheet的rowCount实现,参考如下代码:
spread.bind(GC.Spread.Sheets.Events.PivotTableChanged, function (evt, args) {
var sheet = spread.getActiveSheet();;
var ptRange = sheet.pivotTables.get(args.pivotTableName).getRange();
var sheetCount = sheet.getRowCount();
sheet.setRowCount(Math.max(sheetCount, ptRange.content.row + ptRange.content.rowCount));
});
页:
[1]