正文

[VB]将VB表格中的数据导出到Excel2006-05-14 17:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/fengfei/14050.html

分享到:

步骤介绍:

首先在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表格模式中的,不过我自己还没去研究,等研究好了在写出来,特殊的如下:


阅读(10754) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册