Fastreport报表合并单元格技巧在做企业的ERP,SCM,CRM等等的软件中,经常要做的就是报表,如财务报表,生产车间报表。很多时候企业可能对报表格式提出特别的要求,但作为软件开发公司,能设计开发出符合客户要求的报表就显得十分迫切。以下我对报表的合并技巧作一个总结,希望对后面要做类似报表的同事有些帮助。合并报表1:江苏美的春花电器股价有限公司-委外加工材料月结表在没有合并之前显示如下:在对供应商编码和材料编码进行合并后显示如下:---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---对于合并功能,其实fastreport是有的,但这个功能做得远远不够,不能按客户的要求进行合并,要完成上述功能,我是通过下面的方法做出来的。这种要求的合并要结合Delphi与Fastreport来协作完成。首先然前台Delphi相应方法中编写有关的算法,然后在Fastreport中根据这种算法作相应的显示。操作方法如下:1.选中Fastreport的主数据项,双击OnBeforePrint方法,在beginend之间编写代码:---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---1.MainData.Height:为每行数据显示的高度,2.[CLTAutoreporthead_AutoreportlineOfAutoreporthead."Flag"]:表示要合并的行数(Delphi算法),3.memo7.visible:是否显示单元格,[CLTAutoreporthead_AutoreportlineOfAutoreporthead."Search_Flag"]=2:(Delphi算法),只要在Delphi中把要合并的行数与列用字段Flag(控制行数),Search_Flag(控制是否可见,2为可见)算出来,再在FastReport中显示出来,那么合并功能就算搞好。以下是在Delphi中的合并算法代码:functionTAutoReportProcessMonthForm.GetFastRptObj:TBizObject;varBizHead,BizLine:TBizObject;i,j,k,n,m,p:Integer;Head:TAutoreporthead;Line:TAutoreportline;slItemVendor,slVendors:TStringList;strItemVendor,strItemVendor2,strVendor:String;VendorsCount:arrayofInteger;beginMyCheck;Head:=TAutoreporthead.Create(false,true);Head.UserName:=LoginUser.UserName;fori:=1todgVieRowCount-1doifdgVieRowProps[i].Checkedand(notdgVieIsRowEmpty(i))thenbeginLine:=TAutoreportline.Create;self.SetDgDataToBizObject(i,dgView,TBizObject(line));head.AutoreportlineOfAutoreporthead.Add(line);end;//合并报表算法开始addedbywbc,2009-04-23slItemVendor:=TStringList.Create;slVendors:=TStringList.Create;fori:=0tohead.AutoreportlineOfAutoreporthead.Count-1dobeginstrItemVendor:=TAutoreportline(head.AutoreportlineOfAutoreporthead.Items[i]).Item_Code+TAutoreportline(head.AutoreportlineOfAutoreporthead.Items[i]).Vendor_Code;ifPos(strItemVendor,slItemVendor.Text)=0thenslItemVendor.Add(strItemVendor);---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---strVendor:=TAutoreportline(head.AutoreportlineOfAutoreporthead.Items[i]).Vendor_Code;ifPos(strVendor,slVendors.Text)=0thenslVendors.Add(strVendor);end;//showMessage(slVendors.Text);setLength(VendorsCount,slVendors.Count);fori:=0toslVendors.Count-1dobeginVendorsCount[i]:=0;forj:=0tohead.AutoreportlineOfAutoreporthead.Count-1doifsameText(slVendors.Strings[i],TAutoreportline(head.AutoreportlineOfAutoreporthead.Items[j]).Vendor_Code)thenbeginVendorsCount[i]:=VendorsCount[i]+1;end;end;setLength(MyVendors,slVendors.Count);fori:=0toslVendors.Count-1dobeginMyVendors[i]:=TMyVendor.Create;MyVendors[i].Vendor_Code:=slVendors.Strings[i];setLength(MyVendors[i].XVendors,VendorsCount[i]);n:=0;forj:=0tohead.AutoreportlineOfAutoreporthead.Count-1doifsameText(slVendors.Strings[i],TAutoreportline(head.AutoreportlineOfAutoreporthead.Items[j]).Vendor_Code)thenbeginMyVendors[i].XVendors[n]:=TXVendor.Create;MyVendors[i].XVendors[n].index:=j;//MyVendor...