找回密码
 立即注册

QQ登录

只需一步,快速开始

写BUG的程序员
金牌服务用户   /  发表于:2024-8-22 09:32  /   查看:939  /  回复:10
1金币
如下图,模板中sheet3有36行,里面有个基于sheet1表格的透视表,在sheet1通过table.bind绑定更多数据时,sheet3透视表页行数没有自动扩展,导致透视表显示不全


image.png507024230.png

最佳答案

查看完整内容

您好!围绕咱们讨论的内容,我整理了一个博客,如下链接。您可以结合博客中的代码和代码运行后的效果综合理解下咱们讨论的内容。 https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=225272&page=1&extra=#pid832479

10 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-8-22 09:32:52
来自 10#
您好!围绕咱们讨论的内容,我整理了一个博客,如下链接。您可以结合博客中的代码和代码运行后的效果综合理解下咱们讨论的内容。
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=225272&page=1&extra=#pid832479
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-22 12:17:32
2#
您好!当您的Sheet1中table中新增数据行时,通过TableRowsChanged事件可以监听到table相关的行数信息,如果该行数超过您的Sheet3的行数,则为Sheet3扩展行数至table行数,或者也可以为Sheet3定义其他的添加行数策略。您可以参考如下代码:
  1. spread.bind(GC.Spread.Sheets.Events.TableRowsChanged, function(e, args) {
  2.     console.log('table rows changed: ', e, args);
  3.     var sheet = spread.getSheetFromName('Sheet4');
  4.     var sheetRowCount = sheet.getRowCount();
  5.     var table = args.table;
  6.     var tableRowCount = table.dataRange().rowCount;
  7.     if (sheetRowCount < tableRowCount) {
  8.         sheet.setRowCount(tableRowCount);
  9.     }
  10. });
复制代码


关于TableRowsChanged事件,请参考官网API文档了解详情:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Events#tablerowschanged
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-8-22 13:45:03
3#
本帖最后由 写BUG的程序员 于 2024-8-22 13:48 编辑
Wilson.Zhang 发表于 2024-8-22 12:17
您好!当您的Sheet1中table中新增数据行时,通过TableRowsChanged事件可以监听到table相关的行数信息,如果 ...

不是通过事件增加的表格行数,而是数据源的数据发生改变,您可以参考如下demo。 当我绑定了一个数据表的时候这个表里可能有10条数据,下次要渲染报表的时候,数据表里可能有100条数据了,打开通过table.bind去绑定100条数据,这时,透视表应该是100条数据的透视,可是超过了透视表sheet页的总行数,导致透视表渲染不全,跟增加表格事件没有关系

demo.zip

8.12 MB, 下载次数: 78

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-22 14:40:23
4#
写BUG的程序员 发表于 2024-8-22 13:45
不是通过事件增加的表格行数,而是数据源的数据发生改变,您可以参考如下demo。 当我绑定了一个数据表的 ...

我们走读并运行了您提供的demo,每次点击“加载数据”按钮触发的操作会新增Sheet1中的行列,Table的尺寸未被调整。根据您描述的内容,其中提到的“数据表”和“表格”都是Table吧?当有新数据填充进Table中时,会扩展Table的行,即行数发生变化。这样便可以通过监听TableRowsChanged事件监测Table是否有新数据填充进来,这也是符合您所说的10条变100条数据。那么,当TableRowsChanged事件被触发时,去检测与Table相关的数据透视表所在工作表Worksheet是否有足够行,如果没有则扩展之,扩展完再对数据透视表刷新数据源。如下动图所示:
Table新增行同步扩展PivotTable所在Worksheet行.gif
综上所述,并非建议您通过事件增加Table的行数,而是通过事件监听Table新增行,而后扩展数据透视表所在Worksheet的行或列,达到数据透视表完整展现的目的。这是一个思路,您可以结合您的代码和需求尝试下这个方案。
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-8-22 16:10:13
5#
本帖最后由 写BUG的程序员 于 2024-8-22 16:14 编辑
Wilson.Zhang 发表于 2024-8-22 14:40
我们走读并运行了您提供的demo,每次点击“加载数据”按钮触发的操作会新增Sheet1中的行列,Table的尺寸 ...

不要点按钮,按钮就是个摆设,页面打开之后,透视表就是缺数据的一个状态,我就是想打开这个页面的时候,透视表可以展示全,并且打开的时候无法确定透视完有多少行啊,怎么添加呢?  我理解,打开的时候如果sheet页区域不满足透视表数据展示的时候,应该得自动扩展吧,所以这个应该是个BUG
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-8-22 16:21:54
6#
本帖最后由 写BUG的程序员 于 2024-8-22 16:23 编辑
Wilson.Zhang 发表于 2024-8-22 14:40
我们走读并运行了您提供的demo,每次点击“加载数据”按钮触发的操作会新增Sheet1中的行列,Table的尺寸 ...

那我换一个说法,复现步骤:
1、我用官方案例,创建了一个数据表,然后基于这个数据表在新sheet页插入了一个透视表。

image.png824163818.png


第二步,为了复现简单先把sheet页的行数删到只剩20行,默认是200行,其实200行也同理
image.png237529601.png

第三步,往透视区域拖数据,当第二个指标拖进来之后,透视表的数据就展示不全了
image.png800960693.png

image.png220761717.png
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-22 17:42:08
7#
写BUG的程序员 发表于 2024-8-22 16:21
那我换一个说法,复现步骤:
1、我用官方案例,创建了一个数据表,然后基于这个数据表在新sheet页插入了 ...

基于您现在的描述,如果是手动向数据透视表拖拽字段,那您可以参考这篇博客中的方法实现扩展数据透视表所在工作表的行数:https://gcdn.grapecity.com.cn/showtopic-169194-1-1.html
回复 使用道具 举报
写BUG的程序员
金牌服务用户   /  发表于:2024-8-23 09:45:12
8#
Wilson.Zhang 发表于 2024-8-22 17:42
基于您现在的描述,如果是手动向数据透视表拖拽字段,那您可以参考这篇博客中的方法实现扩展数据透视表所 ...

这个能否做一个优化,做成根据透视表数据自动扩展的呢
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-23 11:44:54
9#
写BUG的程序员 发表于 2024-8-23 09:45
这个能否做一个优化,做成根据透视表数据自动扩展的呢

您提到的”根据数据透视表自动扩展“是指不手动拖拽吗?
那可能问题又回到原来了,其实这个问题的核心在于扩展数据透视表所在工作表的行或列,通过Worksheet:setRowCount()和Worksheet:setColumnCount()将行列分别设置为更大的数值来扩展工作表的行列。而另一个要素是何时扩展,之前根据您的描述,我理解为在Table中的数据沿行方向扩展时同步扩展数据透视表所在工作表的行数,这是可行的。如果需要在初始化时扩展,何不在初始化时就对数据透视表所在的工作表设置足够的行呢,即便数据透视表所占行数较少,也可以在后期裁剪删除透视表区域以外的行。所以定义好这两个部分的代码逻辑即可,您可以结合在本贴中向您提供的两种扩展方案自行评估下。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部