FastReport 自带的单元格合并功能为“抑制重复值”,功能真的很弱,还不如不用。网上也有不少解决方案,不过用来用去,都不尽人意。
下面是网上的两个方案:
1、报表脚本中写代码解决:单元格合并
2、修改相关源代码解决:单元格合并
最初我是两种方案结合使用,第1种方案的缺点是很明显的,有时需要写很多的代码,一不小心容易出错;第2种方案也存在问题,似乎只处理第一页的的情况,当有多页时,就乱套了。
由于本人多个软件都是使用fastreport报表控件,随着时间推移,报表越来越多,设计报表也带来了很大的工作量,实在维以忍受。年初开始研究了fastreport的相关源码,目前终于制定了自己的解决方案。
解决原理:
1、建立自己的数据结构,用于保存所有单元格内容、高度、行号、列号;
2、采用两遍报表方式,第一遍记录各个单元格内容及高度,在第二遍之前在自己的数据结构中计算哪些单元格需要合并及合并后各单元格的高度;
3、在第二遍过程当中,设置相应的单元格的高度,合并的单元格第一个设置其高度为合并后的高度,被合并的其它单元格设置为不显示;
对源码修改的单元只有 frxClass.pas 与 frxEngine.pas 单元,修改的代码不是很多,另外添加了一个自己的单元frxMergeCell.pas,用于建立自己的数据结构。
本报表单元格合并有两种方案:
第1种:左边的单元格为父单元格,只有父单元格相同时才合并;
第2种:与左边的单元格无关,只要相同就合并。
有偿提供相关源码,如有需要,请联系QQ:258322672,价格不会很高,主要修改这个东西确实花了点时间,若有购买,后期不管是否与本源码相关的技术,只要知道的都会尽力提供。支持fastreport4.*系列,是否支持fastreport3.*系列未测试。
格式1报表:
格式2报表: