分组报表如何组内补空行以及增加组内页码
在报表做数据展示或者打印时,往往对报表格式有一些特殊要求,比如展示时要按某字段分组,将相同组内数据放一起展示,为了更好的展示数据,要求到下一组数据时重新开始分页,组内数据分页后如果最后一页数据不满一页则补充相应的空行达到占满一页效果,并且在组内表头上显示出页码信息,页码展示的是当前组内分页信息,下面通过一个实例来看下如果实现这种特殊分页报表。
报表模版如图:
A1~A9 单元格为合并单元格,表达式为:=ds1.group(货主城市; 货主城市:1),按照城市字段进行分组,这样右侧部分会显示每个城市下对应的数据。
B1 表达式:=ds1.count(),由于一组内数据可能会超过一张纸大小,所以在 B1 单元格算出组内数据条数,用于后边计算该组内一共会分成多少页。
C1 表达式:=to(1,if(B1+==0,B1/20,int(B1/20)+1)),在 C 列模拟了组内分页,这里需要预估下一张纸内能显示多少行信息,这里用的 20 行,也就是大概一张 A4 纸,除去表头和表尾外大概能放下 20 行,实际使用时根据纸张和单元格高度计算下就行。比如 B1 算出来的组内条数是 100 条,那么这组数据会扩展出 5 页,这里用 to 函数实现了根据页数的扩展。
右侧报表部分根据实际模版进行设置就行,这里就不做详细说明,1 到 7 行是表头信息,显示相应字段数据,第 8 行展示明细数据,这里需要特殊处理下,因为需求中要求展示组内页码,所以通过 C1 单元格扩展出了组内页数据,在明细数据取数时也要根据相应的页信息取对应的数据。
D8 表达式:=to((C1-1)*20+1,C4*20),这里根据 C1 的分页数据扩展出对应的序号行,比如第一页扩展出的是 1 到 20,第二页展示的就是 21 到 40,用于后边取明细数据时根据行数取数,并且需求中要求补空行操作,这里 to 扩展时,也会根据页码补充对应的空行数据。
E8 表达式:=valueat(ds1.select(#0),D8-1),#0 列是数据集内自带的一个序号列,里边存储的是数据的行号,ds1.select(#0) 会取出本组内的序号信息,这里用到了 valueat 函数,该函数可以从一组数据内根据位置取出某条信息,从 0 开始,这样就可以根据 D8 单元格的序号取出对应的序号。
F8 表达式:=ds1.select(产品 ID,#0==E8),根据条件取出对应的数据。
G9 表达式:=“第”+C1+“页 / 共”+if(B1+==0,B1/20,int(B1/20)+1+“页”),在 G9 单元格中显示当前页是组内第几页以及组内共几页,C1 单元格是组内页码,然后在根据 B1 的条数算下组内总页数就可以了。
在选中 D9,将 D9 单元格属性栏中的行后分页属性勾中,这样每组显示完后会进行分页,下一组数据会在新页内展示。
将前边的辅助行隐藏掉,预览看下结果: