带有自动换行单元格的报表怎么补空行
报表补空行是比较常用的功能之一,比如每页固定行数呈现,当某页面不足行数时自动补空白行;再如按纸分页,当不满一页时需要自动补足一页等。
针对补空行的问题,如果报表的单元格都不带自动换行(行高都固定了)的话,一般都是很好处理的,可参考: 润乾 V2018 浏览式报表补空行 。但是,一旦单元格内容多了,设置允许自动换行后就很难控制到底需要补多少行了。虽然有一种可以补满一页方式(分页填充,用法很简单,参考 报表尾始终展示在页的底部 ),把一行的高度拉高来填充满一页,但好多用户都不太同意用该方式。
用户想要的是下面这种
那么,对于带自动换行报表补空行问题,有啥解决方案呢?
大概是两种,但也要看报表情况选择:
1、 Api
先把报表算一遍,然后看最后一页的所有行总高度,用纸张高度减一下,剩余高度也就是需要补空的,算一下补几行合适后,回写到报表模板重新算一下就 ok。不过,这种情况基本上只能补进最后一页补空行的,如果分组分页的报表,每组的最后一页都要补,就太复杂了。
2、 思路也比较简单,根据自动换行的单元格换行后,大概多占用了几行,我们在补空行的时候,把这一部分减掉就行了。比如有一单元格值出现换行(怎么判断可以看下面的实例),且经过计算大概多占用了 1 行,那么我们补空行的表达式里多减个 1 就可以了。并且这个方法既可以解决网格式报表最后一页补,也可以解决分组分页报表每组最后一页补空的问题。
API 的要麻烦,门槛也高点,我们接下来的内容看下方法 2 如何搞。
这里分两种报表类型:
1、 网格式报表,只需要最后一页补空行
比如报表如下
其中,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 行扩展的数据。
比如我们测试的报表每页可以是显示 13 行。
(3) 补空行
和不带自动换行的补空行方式 (表达式:to(1,13-ds1.count()%13) 一样,只不过我们这里需要多减掉 L6 算出来的多多扩展出来的行数。
A7 表达式:=to(1,13-ds1.count()%13-sum(L6{L6>0}))
这样就完成补空行了,如下(共两页及第二页的补空行效果)
2、 分组分页报表,每个分组的最后一页都需要补空行
和上面的网格报表类似,其实我们只需要算每组多扩展出来的行去算就可以了。
比如上面的报表,A6 是分组,每组的最后一页会强制换行,都可能需要补空行补足一页。
这里不再详细介绍制作过程,附件会把该报表(分组分页补空.rpx)上传,参考时 注意看 T6 内计算多扩展行的方法,及 B7 补空行表达式就可以了。
总结来说,以上方案尽管不能非常精确的补空行,但相比目前已知的其他方式更清晰,且操作简单,实现的效果还是很好的,误差也是基本可接受的。
附件:
分组分页补空.zip
对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅
嗯,还不太了解好多乾?