【VB中巧用Excel实现报表设计】Excel报表

  摘要: 本文结合实例介绍了在VB中利用Excel实现复制报表的设计的方法,该方法把VB强大数据库管理与Excel灵活的报表设计有机结合起来,简化了编程,提高了程序的便利性。
  关键词: Visual Basic Excel 报表
  
  引言
  在数据库应用中,数据报表是非常重要的部分,Visual Basic中的数据报表器可以很方便地创建数据报表,但由数据报表器设计的表格样式单一,功能较少。微软公司的Excel软件想必大家都很熟悉,它那强大的报表设计功能和简单的操作界面,给大家留下了很深的印象。若能把VB中的数据输出至Excel格式的报表中,使得VB的数据库管理功能与Excel的报表设计功能结合起来,将大大方便普通用户的使用。本文借助一个实例详细介绍VB中如何利用Excel进行报表设计的方法。
  1.Excel对象
  借助Excel对象,可以很方便地在VB数据库程序中生成Excel报表。应用程序的最终用户在Excel环境中对报表做进一步的处理,如格式修改、打印预览、打印及保存等。
  Excel对象封装了Microsoft Excel的全部对象,我们主要使用其中的五种对象,详细介绍如下。
  Application对象:表示Excel应用对象,可以控制Excel应用程序的外观或功能[1],是访问Excel其他对象的切入点。
  Workbook对象:表示Excel中的工作簿,即对应一个Excel文件,可以实现对Excel工作簿的各种控制[1]。
  Worksheet对象:表示Excel中的工作表,可以实现对Excel工作表的各种控制[1]。
  Range对象:表示Excel中的区间,例如可以代表Excel中的某一单元格、某一行、某一列、某一选定区域[1]。
  Cells对象:表示Excel中的一个单元格[2],通过该对象读取Excel中的数据或将数据写入Excel中。
  2.操作步骤
  在VB中借助Excel生成报表,需完成如下工作:
  (1)在Excel中制作报表模板,设计报表标题、表头的样式,包括字体字号、边框等等。生成报表的过程实质上就是拷贝该模板并在新文件中填入具体的数据。
  (2)在VB中引用Excel对象[1]。首先在工程中选择“工程”→“引用”,并选择“Microsoft Excel 11.0 Object Library”。
  (3)在工程中使用New关键字声明Excel对象[1]。例如语句Dim n_xls As New Excel.Application声明了Excel对象n_xls。
  (4)使用Excel对象的属性和方法设计报表[1]。例如语句.Cells(1,1)=″常州技师学院″实现在A1单元格中写入数据。
  (5)保存文件,释放Excel对象。例如语句n_xls.Quit释放Excel对象。
  3.实例
  下面以常州技师学院招生系统中新生资料(分班)报表的设计为例,详细介绍VB中巧用Excel实现报表设计的过程。本实例生成新生资料总表和分表,可实现自动分页功能,所有数据一次打印,工作人员无需守候在打印机旁,分表中为一个班级新生资料,便于日后单个班级资料的打印工作。
  首先在Excel中制作如图一的模板文件“新生资料(分班).xls”,保存在专用文件夹data中。
  
  下面就以图一为例,说明在VB中是实何利用Excel实现报表设计的,窗体中的重点部分程序代码如下:
  Dim gzApp As New Excel.Application″声明Excel对象gzApp
  Dim gzWorkbook As New Excel.Workbook″声明工作簿对象gzWorkbook
  Dim gzWorkSheet As New Excel.Worksheet″声明工作表对象gzWorkSheet
  Dim range1 As Excel.Range″声明区间对象range1
  Dim fname As String″fname变量用来存放生成的文件名,包括年份及生成日期
  fname=″临时″& Trim(Str(Year(Date)))&″新生资料(分班)_″& Date
  ″拷贝模板文件得到新的报表文件
  FileCopy App.Path+″\data\新生资料(分班).xls″,App.Path+″\data\″& fname &″.xls″
  Set gzWorkbook=gzApp.Workbooks.Open(App.Path+″\data\″& fname &″.xls″,False,True)
  Dim i As Integer″新增各班级工作表,重命名为班级名称,班级名称在列表List2中
  Set gzWorkSheet=Sheets(1)
  For i=1 To List2.ListCount
  gzWorkSheet.Copy after:=Sheets(i)
  Next
  For i=0 To List2.ListCount-1
  Set gzWorkSheet=Sheets(i+2)
  gzWorkSheet.Select
  gzWorkSheet.Name=List2.List(i)
  Next
  ″存放班级总人数,在总表中起始位置及结束行数
  Dim bj_number(100)As Integer,bj_start(100)As Integer,bj_end(100)As Integer
  ″填写总表数据
  Set gzWorkSheet=Sheets(1)
  gzWorkSheet.Activate
  With gzWorkSheet
  ……
  ″实现自动分页,变量hs表示当前的行数
  hs_char=″A″& Trim(Str(hs+1))
  gzApp.ActiveSheet.Range(hs_char).Select
  gzWorkSheet.HPageBreaks.Add Before:=ActiveCell
  ″表头格式的复制及内容的填写
  gzApp.ActiveSheet.Range(Cells(1,1),Cells(3,8)).Copy_
  Destination:=.Range(Cells(hs+1,1),Cells(hs+3,8))
  .Cells(hs-2,1)=Trim(Str(Year(Date)))&″年常州技师学院新生资料(分班)表″
  .Cells(hs-1,2)=List2.List(k)
  .Cells(hs-1,6)=rs_temp″班级人数、男生人数和女生人数信息
  .Cells(hs-1,8)=″第″& bj_page_n &″页″
  ……
  ″数据行的格式复制
  gzApp.ActiveSheet.Range(Cells(4,1),Cells(4,8)).Copy_
  Destination:=.Range(Cells(hs,1),Cells(hs,8))
  hs_char=″A″&Trim(Str(hs))&″:H″& Trim(Str(hs))
  Set range1=gzApp.ActiveSheet.Range(hs_char)
  range1.ClearContents
  Set range1=Nothing
  ″写入数据
  .Cells(hs,1)=Trim(rs.Fields(″order_no″))
  .Cells(hs,2)=Trim(rs.Fields(″xm″))
  .Cells(hs,3)=Trim(rs.Fields(″xb″))
  .Cells(hs,4)=Trim(rs.Fields(″byxx″))
  .Cells(hs,5)=Trim(rs.Fields(″csny″))
  If(rs.Fields(″is_zs″))Then.Cells(hs,6)=“是”
  .Cells(hs,7)=Trim(rs.Fields(″lsr″))
  .Cells(hs,8)=Trim(rs.Fields(″addr″))
  ……
  End With
  Dim gzWorkSheet_n As Excel.Worksheet″从总表中拷贝数据至各分表
  Dim myrange1 As Range,myrange2 As Range
  For k=0 To List2.ListCount-1
  Set gzWorkSheet=Sheets(1)
  Set gzWorkSheet_n=Sheets(k+2)
  gzWorkSheet.Activate
  Set myrange1=gzApp.ActiveSheet.Range(Cells(bj_start(k),1),Cells(bj_end(k),8))
  myrange1.Copy
  gzWorkSheet_n.Activate
  myrange2.Activate
  myrange2.PasteSpecial
  Clipboard.Clear
  Next
  For k=0 To List2.ListCount-1″各分表分页,每页42行
  If bj_number(k)>42-3 Then
  Set gzWorkSheet_n=Sheets(k+2)
  gzWorkSheet_n.Activate
  For i=1 To(bj_end(k)-bj_start(k))\42
  hs_char=“A”& Trim(Str(42*i+1))
  gzApp.ActiveSheet.Range(hs_char).Select
  gzWorkSheet_n.HPageBreaks.Add Before:=ActiveCell
  Next
  End If
  Next
  ″删除临时文件,保存文件,释放Excel对象
  Kill App.Path+″\data\″& fname &″.xls″
  fname=Mid(fname,3)
  gzWorkbook.SaveAs App.Path+″\data\″ & fname &″.xls″
  gzWorkbook.Close:gzApp.Quit
  4.总结
  在VB中利用Excel实现报表设计,不仅减少了报表设计的工作量,还使生成的报表摆脱了以往简单死板的感觉,取而代之的是功能齐全、灵活多变的风格。这种方法既利用了Visual Basic强大的数据库管理功能,又利用了Excel灵活的报表设计功能,互相配合,取长补短。
  
  参考文献:
  [1]明日科技.Visual Basic开发技术大全.北京:人民邮电出版社,第1版.
  [2]刘丹丹,胡彩虹,张成才.基于Excel和数据库在VB中制作报表.气象与环境科学,2007,(8):90-93.
  [3]王瑾瑜,王晓利,恩和门德,杜伟.基于VB和Excel的报表设计及打印.内蒙古电大学刊,2006,(4):50-51.
  [4]陈军,李凌云.利用VB实现复杂数据报表的输出.烟台师范学院学报,2004,20,(1):27-30.
  [5]冯诗齐.用Excel生成VB应用软件的报表.电脑学习,2004,(3):52-54.

推荐访问:巧用 报表 设计 VB