WEB开发网
开发学院WEB开发综合 用VB控制EXCEL生成报表 阅读

用VB控制EXCEL生成报表

 2006-02-27 11:54:44 来源:WEB开发网   
核心提示:做为一种简捷、系统的Windows应用程序开发工具,VisualBasic5具有强大的数据处理功能,用VB控制EXCEL生成报表,提供了多种数据访问方法,可以方便地存取MicrosoftSQLServer、Oracle、XBase等多种数据库,下面给出一个实例:首先建立一个窗体(FORM1)在窗体中加入一个DATA控件
做为一种简捷、系统的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下通过。->

Tags:VB 控制 EXCEL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接