步骤介绍:
首先在VB建一个MSFlexGrid表格,再连接到数据库,将数据库的表的资料显示到表格中,最后调用ExportExcel1()函数将表格中数据导出到Excel.
第一步:在VB建一个MSFlexGrid表格,再连接到数据库,将数据库的表的资料显示到表格中,这个代码我就不写了。 大家应该都知道写把。
第二步:将以下函数代码放到模块里,只需改3处代码,则可实现导出功能,其他地方不用改。
/* IntToChr(这个函数不要做任何修改)
说明:将网格的列数转换成Excel中的字符形表示方式
*/
Public Function IntToChr(iRow1 As Integer, iCol1 As Integer, iRow2 As Integer, iCol2 As Integer) As String
Dim i As Integer, j As Integer, tmpi As Integer
Dim Tmpstr(1 To 2) As String
If iCol1 < 1 Or iCol1 > 256 Or iCol2 < 1 Or iCol2 > 256 Then
IntToChr = ""
Exit Function
End If
j = iCol1 Mod 26
If j = 0 Then
i = (iCol1 \ 26) - 1
j = 26
Else
i = (iCol1 \ 26)
End If
If i > 0 Then
Tmpstr(1) = Chr(64 + i) & Chr(64 + j)
Else
Tmpstr(1) = Chr(64 + j)
End If
j = iCol2 Mod 26
If j = 0 Then
i = (iCol2 \ 26) - 1
j = 26
Else
i = (iCol2 \ 26)
End If
If i > 0 Then
Tmpstr(2) = Chr(64 + i) & Chr(64 + j)
Else
Tmpstr(2) = Chr(64 + j)
End If
IntToChr = Tmpstr(1) & iRow1 & ":" & Tmpstr(2) & iRow2
End Function
首先先作一个Excel表的模式,如下:学生资料将以次格式显示出来
/*ExportExcel1(此函数将以如上表的模式显示数据)
说明:以一般的形式导出学员基本信息表
此函数只要修改3个地方就可以导出数据到Excel表中
*/
Public Sub ExportExcel1(ByVal MyObject As Object)
Dim i As Integer, j As Integer, Rows As Integer, Cols As Integer
Dim Firsti As Integer
Dim NashXl As Object, tmpChr As String
Dim excel_app As Object, excel_sheet As Object
Dim xlNone As Integer, xlEdgeLeft As Integer, xlContinuous As Integer, xlThin As Integer
Dim xlAutomatic As Integer, xlEdgeTop As Integer, xlEdgeBottom As Integer
Dim xlEdgeRight As Integer, xlInsideVertical As Integer, xlInsideHorizontal As Integer
Dim xlDiagonalDown As Integer, xlDiagonalUp As Integer, xlCenter As Integer, xlMedium As Integer
Dim xlNormal As Integer
'Dim fso As New FileSystemObject
Screen.MousePointer = 11
'定义Excel中关于边框和文字位置的常量
xlContinuous = 1
xlThin = 2
xlDiagonalDown = 5
xlDiagonalUp = 6
xlEdgeLeft = 7
xlEdgeTop = 8
xlEdgeBottom = 9
xlEdgeRight = 10
xlInsideVertical = 11
xlInsideHorizontal = 12
xlNone = -4142
xlAutomatic = -4105
xlCenter = -4108
xlMedium = -4138
xlNormal = -4143
'打开Excel
Rows = MyObject.Rows
Cols = MyObject.Cols
Set excel_app = CreateObject("excel.application")
'新增一个空的Excel的Sheet页
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
/* 第一处: “App.Path & "\表格\学员信息表.xls”表示你的Excel表格模式的地址,修改成你的Excel表格模式的地址就行了 */
excel_app.Workbooks.Open FileName:=App.Path & "\表格\学员信息表.xls"
' excel_app.Workbooks.Add
If Val(excel_app.Application.Version) >= 8 Then
Set excel_sheet = excel_app.ActiveSheet
Else
Set excel_sheet = excel_app
End If
Set NashXl = excel_sheet.Application
/* 第二处:修改下面的2个for循环。 rows表示MSFlexGrid表格的行数,cols表示MSFlexGrid表格的列数, 2个循环既是将MSFlexGrid表格表格中所有的数据导出到Excel表中。 excel_sheet.Cells( x, y ).value 表示Excel中的单元格,参数x表示行数,y表示列数,同过x,y来确定将要存放数据的单元格,".value"既设置此单元格的值。 MyObject是ExportExcel1函数的参数,用来指示MSFlexGrid表格。 MyObject.TextMatrix( x, y )用来获得位于MSFlexGrid表格中x行y列的值。 通过这2个for循环则将MSFlexGrid表格中的数据添加到了Excel中。但是添加到Excel中的数据并没有用线将数据行列分开和框起来,因此要用到IntToChr()函数来实现这个功能。 第三处修改的也正是IntToChr()函数的参数。*/
For i = 1 To Rows - 1
For j = 1 To Cols
excel_sheet.Cells( i + 5, j + 2 ).Value = MyObject.TextMatrix(i, j - 1)
Next j
Next i
'定义边框
/*
第三处修改:tmpChr = IntToChr( iRow1 As Integer, iCol1 As Integer, iRow2 As Integer, iCol2 As Integer ), 参数iRow1,iCol1表示线框在Excel中的起始处的单元格, 如图:
该Excel表格的边框起始处是(6,3),既6行3列。 iRow2,iCol2表示线框在Excel中的结束处的单元格, iRow2参数设定:由于导入到Excel中的数据的行数由MSFlexGrid中的数据的行数决定的,所以先用“Rows - 1”表示MSFlexGrid有多少的数据(减1是因为MSFlexGrid第一行是标题,不是数据),然后在加用“Rows - 1”加“5”因为我的Excel表的模式(上图)是从第六行开始显示数据的。 最后得结果为“Rows + 4”.. iCol2参数设定:iCol2表示Excel最后一列的列数,上图的最后一列的标题是“性别”,既列数为5。
综上tmpChr = IntToChr( 6, 3, Rows + 4, 5 )
三处修改完毕,这个函数就不用管了。呵呵。 现在来做最后一步
*/
tmpChr = IntToChr(5, 3, Rows + 5, 5)
NashXl.range(tmpChr).Select
' NashXl.Selection.Columns.AutoFit
NashXl.Selection.Borders(xlDiagonalDown).LineStyle = xlNone
NashXl.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With NashXl.Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
With NashXl.Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
With NashXl.Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
With NashXl.Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
With NashXl.Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
With NashXl.Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
' .ColorIndex = xlAutomatic
End With
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
excel_app.Visible = True
Set NashXl = Nothing
Set excel_sheet = Nothing
Set excel_app = Nothing
Screen.MousePointer = 0
End Sub
最后一步: 定义一个按钮,点击按钮调用ExportExcel1( MSFlexGrid )函数,MSFlexGrid为VB表格的名字。
完工。 呵呵。 运行后如下图:
如有不懂的地方可以回复,大家一起交流。呵呵。
本来还可以导出到特殊的Excel表格模式中的,不过我自己还没去研究,等研究好了在写出来,特殊的如下:
评论