本帖最后由 Wilson.Zhang 于 2024-8-23 16:46 编辑
无论以工作表中普通区域为数据源,还是以Table为数据源,都可以创建数据透视表,且可以自由选择在新工作表或当前工作表生成数据透视表。当数据源中新增或删除数据后,对数据透视表刷新即可同步更新。将数据透视表放置在数据源所在工作表A之外的新工作表B,且限制工作表B的行数仅能容纳当前数据透视表区域。当数据源Table新增了数据后,对数据透视表刷新,受限于工作表B的行数,数据透视表也无法沿着行方向扩展。针对这样的场景如何救场呢?
来浅浅分析一下,数据透视表寄生在工作表B上,而工作表B的行数等于当前数据透视表行数,那就扩展工作表B的行数,这样数据透视表的新数据也有容身之处。可是在什么时候扩展工作表B的行数呢?既然引发这一切变化的是工作表A中Table数据的新增,那么就在Table的区域发生变化时联动工作表B行数扩展,进而支持数据透视表区域扩展。谋事在人,成事在天,SpreadJS正好支持TableRowsChanged事件,该事件在Table行数变化时被触发,那就以这个监听事件为突破口吧!
具体地,在工作簿上注册TableRowsChanged事件,在该事件的处理函数中定义相关处理逻辑: 1. 获取工作表B实例。 2. 判断工作表B行数是否大于Table区域行数,如果不大于则扩展至与Table区域行数平齐,也可大于Table区域函数。(此处以最简单的场景为例,即数据透视表中只有一个行字段,扩展逻辑据实际情况定义。) 3. 工作表B行数扩展后,对数据透视表刷新以同步数据源Table的数据变化。
如果在初始时工作表B的行数也不足以容纳原始数据透视表呢?老办法,依然扩展工作表B的行数,为数据透视表圈地。假设数据透视表在工作表B中的起始位置为左上角,那就设置工作表B的行数等于或略大于数据透视表行数,扩展逻辑应根据实际情况而定。
请参考附件Demo,结合如下动图了解详情: |