关键词VB、编程、多功能报表
一、前言
VB中开发数据库系统,报表的打印是其中最重要的也是必须常用的功能模块这一。按照报表实现的方法大至可分为三类:第1类是较原始的方法,直接控制打印机对象用Printer进行画线和打印;第2类是使用控件。第3类是将需要打印的报表保存为其它应用程序可以读取的格式,或直接输入到其它程序,利用其强大的打印功能实行打印操作。详细介绍:
DataReport是VB自带的控件,使用Datareport的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。正因为DataReport大多是采用数据绑定模式,所以很难实现,内容较多格式复杂的报表。
CrystalReport就是人们常说的水晶报表,它是第三方控件是Seagate公司出品的报表打印浏览工具,在其8.0以上版本的功能就非常强大,控制灵活,堪称是为经典的报表设计工具。它的不足之处就是体积较大,并且是以商业为目的而开发的,价格比较昂贵。
ActiveReport是DataDynamic公司出品的优秀打印控件。功能完备,控制灵活。虽然和水晶报表相比,名气不那么大,甚至有很多人不知道它的存在,但是它在.net报表开发中表现十分出色。
使用外部工具实现报表打印,是指用VBA调用一些外部软件解决打印问题,其中office中的word的excel中的打印是常被借用到的。这种方法的好处是控制十分简单,打印功能十分强大,不需要写打印的代码。但它有一个唯一的缺点就是在用它之前必须安装这类软件,而且给人感觉总是在用其它人的东西。
使用Printer对象编程进行打印,最大的问题是就是要经常计算坐标,需要考虑很多琐碎的问题,代码量比较大,实现的打印预览功能简单。优点是控制灵活,且打印效果比较好,在实应用中,对于一些灵活度较高,功能复杂的报表使用该方法是比较合适的。本文也主要介绍了这种方法的实现过程。VB自带的DataReport与Printer比较起来,编程强度小了很多,而且它以所见即所得的方式设计报表,比较直观,打印出来的报表也较为美观,实现打印预览功能比较简单,当然它也有不足之处,不够灵活,绑定的数据只能是数据集中的,且还有比较多的限制。
二、程序的实现
1、打开VB新建一个工程。并且在工程中新建一个窗体,工程名和窗体名字均为默认值。单击[工程]菜单下的[部件]选取项,在弹出的列表中选中MSHFlexGridWizard选项,然后单击[确定]按键,这样就把MSHFlexGrid添加到了工具箱中了。
2、在体中添加三个MSHFlexGrid控件,分别把三个控件设置成控件组。别外加添加8个Label控件,再添加菜单栏。为了方便起见,所有控件名称均用默认值。
3、程序主要代码
这里有学生成绩统计报表为例,基本数据事先已设计好。
PrivateSubsx4_Click()//缩放菜单
DimiAsSingle,i=1//i为缩放比列。
Callsfhs1(i)//调用预览缩放函数
Picture1.Height=9950*(i)
Forz=0TosNumber-1
MSHFlexGrid2(z).TextMatrix(0,0)="合计:"
Next
EndSub
PrivateSubbbdy_Click()//报表打印
Printer.PaintPicturePicture1.Picture,Int(300),Int(300)
'Printer.PaintPicturePicture1.Picture,Int(Picture1.Width/2)-Int(MSHFlexGrid1.Width/2),Int(Picture1.Height/2)-Int(MSHFlexGrid1.Height/2)
Printer.EndDoc
EndSub
PublicFunctionsfhs1(xsAsSingle)//实现报表放大缩小的函数
Xs为各控件的缩放系数其默认取值为0.25,0.5,0.75,1
在程序中实现报表缩放的方法是将控件的原定位置的坐标乘以缩放系数,再将控件自身长度乘以系数。为了篇幅起件本文只例举下数控件的缩放,其它控件的缩放以此类推。
Picture1.Top=240*xs,Picture1.Width=15180*xs,Picture1.Left=(Width-Picture1.Width)/2
Fori=0TosNumber–1
MSHFlexGrid1(i).ColWidth(0)=500*xs,MSHFlexGrid1(i).ColWidth(1)=1180*xs
……
MSHFlexGrid1(i).ColWidth(20)=700*xs,MSHFlexGrid1(i).Font.Size=9*xs
MSHFlexGrid1(i).Left=277.5*xs,w=0,w2=0,w3=0
MSHFlexGrid1(i).Height=MSHFlexGrid1(i).RowHeight(0)+MSHFlexGrid1(i).RowHeight(1)*(MSHFlexGrid1(i).Rows-1)
……
Label7.Left=14280*xs,Label7.Top=720*xs,Label7.Font.Size=9*xs
EndFunction
4、程序运行结果
三、结束语
Printf是VB提供的一个操作打印对象,可以实现强大的打印功能,可以自定义打印格式,页数,表格的粗细和字体的大小等。但编码较麻烦,需要对各项控件进行定位与计算,但是最灵活的方式。作者利用它对程序进行了学生成绩的统计与打印,取得了理想的效果,大家可以根据作者是思路。调整相应代码,实现自已的报表需求。