用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下通过。->
下面给出一个实例:
首先建立一个窗体(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下通过。->
更多精彩
赞助商链接