龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

用VB控制EXCEL生成报表

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
做为一种简捷、系统的Windows应用程序开发工具,VisualBasic5具有强大的数据处理功能,提供了多种数据访问方法,可以方便地存取MicrosoftSQLServer、Oracle、XBase等多种数据库,被广泛应用于
做为一种简捷、系统的Windows应用程序开发工具,VisualBasic5具有强大的数据处理功能,提供了多种数据访问方法,可以方便地存取MicrosoftSQLServer、Oracle、XBase等多种数据库,被广泛应用于建立各种信息管理系统。但是,VB缺乏足够的、符合中文习惯的数据表格输出功能,虽然使用CrystalReport控件及CrystalReports程序可以输出报表,但操作起来很麻烦,中文处理能力也不理想。Excel作为Micorsoft公司的表格处理软件在表格方面有着强大的功能,我们可用VB5编写直接控制Excel操作的程序,方法是用VB的OLE自动化技术获取Excel97的控制句柄,从而直接控制Excel97的一系列操作。
  
  下面给出一个实例:
  
  首先建立一个窗体(FORM1)在窗体中加入一个DATA控件和一按钮,
  
  引用MicrosoftExcel类型库:
  
  从"工程"菜单中选择"引用"栏;
  
  选择MicrosoftExcel8.0ObjectLibrary;
  
  选择"确定"。
  
  在FORM的LOAD事件中加入:
  Data1.DatabaseName=数据库名称
  Data1.RecordSource=表名
  Data1.Refresh
  
  在按钮的CLICK事件中加入
  DimIrow,IcolAsInteger
  DimIrowcount,IcolcountAsInteger
  DimFieldlen()"存字段长度值
  DimxlAppAsExcel.Application
  DimxlBookAsExcel.Workbook
  DimxlSheetAsExcel.Worksheet
  
  SetxlApp=CreateObject("Excel.Application")
  SetxlBook=xlApp.Workbooks.Add
  SetxlSheet=xlBook.Worksheets(1)
  
  WithData1.Recordset
  .MoveLast
  
  If.RecordCount<1Then
  MsgBox("Error没有记录!")
  ExitSub
  EndIf
  
  Irowcount=.RecordCount"记录总数
  Icolcount=.Fields.Count"字段总数
  
  ReDimFieldlen(Icolcount)
  .MoveFirst
  
  8
  
  ForIrow=1ToIrowcount 1
   ForIcol=1ToIcolcount
  SelectCaseIrow
  Case1"在Excel中的第一行加标题
  xlSheet.Cells(Irow,Icol).Value=.Fields(Icol-1).Name
  Case2"将数组FIELDLEN()存为第一条记录的字段长
  
  IfIsNull(.Fields(Icol-1))=TrueThen
  Fieldlen(Icol)=LenB(.Fields(Icol-1).Name)
   "如果字段值为NULL,则将数组Filelen(Icol)的值设为标题名的宽度
  Else
  Fieldlen(Icol)=LenB(.Fields(Icol-1))
  EndIf
  
  xlSheet.Columns(Icol).ColumnWidth=Fieldlen(Icol)
   "Excel列宽等于字段长
  xlSheet.Cells(Irow,Icol).Value=.Fields(Icol-1)
   "向Excel的CellS中写入字段值
  CaseElse
  Fieldlen1=LenB(.Fields(Icol-1))
  
  IfFieldlen(Icol)<Fieldlen1Then
  xlSheet.Columns(Icol).ColumnWidth=Fieldlen1
   "表格列宽等于较长字段长
  Fieldlen(Icol)=Fieldlen1
   "数组Fieldlen(Icol)中存放最大字段长度值
  Else
   xlSheet.Columns(Icol).ColumnWidth=Fieldlen(Icol)
  EndIf
  
  xlSheet.Cells(Irow,Icol).Value=.Fields(Icol-1)
  EndSelect
  Next
  IfIrow<>1Then
  IfNot.EOFThen.MoveNext
  EndIf
  Next
  WithxlSheet
  .Range(.Cells(1,1),.Cells(1,Icol-1)).Font.Name="黑体"
   "设标题为黑体字
  .Range(.Cells(1,1),.Cells(1,Icol-1)).Font.Bold=True
   "标题字体加粗
  .Range(.Cells(1,1),.Cells(Irow,Icol-1)).Borders.LineStyle=xlContinuous
   "设表格边框样式
  EndWith
  xlApp.Visible=True"显示表格
  xlBook.Save"保存
  SetxlApp=Nothing"交还控制给Excel
  EndWith
  
  本程序在中文Windows98、中文VB5下通过。->

精彩图集

赞助商链接