带有自动换行单元格的报表怎么补空行

报表补空行是比较常用的功能之一,比如每页固定行数呈现,当某页面不足行数时自动补空白行;再如按纸分页,当不满一页时需要自动补足一页等。

imagepng

针对补空行的问题,如果报表的单元格都不带自动换行(行高都固定了)的话,一般都是很好处理的,可参考: 润乾 V2018 浏览式报表补空行 。但是,一旦单元格内容多了,设置允许自动换行后就很难控制到底需要补多少行了。虽然有一种可以补满一页方式(分页填充,用法很简单,参考 报表尾始终展示在页的底部 ),把一行的高度拉高来填充满一页,但好多用户都不太同意用该方式。

imagepng

用户想要的是下面这种

imagepng

那么,对于带自动换行报表补空行问题,有啥解决方案呢?

大概是两种,但也要看报表情况选择:

1、 Api

先把报表算一遍,然后看最后一页的所有行总高度,用纸张高度减一下,剩余高度也就是需要补空的,算一下补几行合适后,回写到报表模板重新算一下就 ok。不过,这种情况基本上只能补进最后一页补空行的,如果分组分页的报表,每组的最后一页都要补,就太复杂了。

2、 思路也比较简单,根据自动换行的单元格换行后,大概多占用了几行,我们在补空行的时候,把这一部分减掉就行了。比如有一单元格值出现换行(怎么判断可以看下面的实例),且经过计算大概多占用了 1 行,那么我们补空行的表达式里多减个 1 就可以了。并且这个方法既可以解决网格式报表最后一页补,也可以解决分组分页报表每组最后一页补空的问题。

API 的要麻烦,门槛也高点,我们接下来的内容看下方法 2 如何搞。

这里分两种报表类型:

1、 网格式报表,只需要最后一页补空行

比如报表如下

imagepng

其中,K6 是自动换行,我们通过第 7 行来补最后一页的空行。

具体过程:

(1) 增加 L 列,在 L6 内根据 K6 的内容来计算多增加的行数。

K6 格每行大概放开 14 个字符,通过大概的估算,当换行后总共是偶数行的时候,大概是多 int(len(K6)/14)-1 行,而换行后总行为奇数时,大概会多 (int(len(K6)/14)-1)*1.5 行。

L6 完整表达式为:if(int(len(K6)/14)%2==0,(int(len(K6)/14)-1)*1.5,int(len(K6)/14)-1)

注意:这里根据个人报表的情况观察后确定较为准确的算法,尽量多算一点,否则补空行表达式如果补多了,可能就多一页了。

(2) 把自动换行的勾选项去掉,看一下在没有自动换行格子的情况下,一页能放开几行第 6 行扩展的数据。

imagepng

比如我们测试的报表每页可以是显示 13 行。

(3) 补空行

和不带自动换行的补空行方式 (表达式:to(1,13-ds1.count()%13) 一样,只不过我们这里需要多减掉 L6 算出来的多多扩展出来的行数。

A7 表达式:=to(1,13-ds1.count()%13-sum(L6{L6>0}))

这样就完成补空行了,如下(共两页及第二页的补空行效果)

imagepng

2、 分组分页报表,每个分组的最后一页都需要补空行

和上面的网格报表类似,其实我们只需要算每组多扩展出来的行去算就可以了。

imagepng

比如上面的报表,A6 是分组,每组的最后一页会强制换行,都可能需要补空行补足一页。

这里不再详细介绍制作过程,附件会把该报表(分组分页补空.rpx)上传,参考时 注意看 T6 内计算多扩展行的方法,及 B7 补空行表达式就可以了。

总结来说,以上方案尽管不能非常精确的补空行,但相比目前已知的其他方式更清晰,且操作简单,实现的效果还是很好的,误差也是基本可接受的。

附件:
分组分页补空.zip

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾