这两天弄机房收费系统的时候,用到了vb与office数据之间的交互,也就是我们将vb中的MSFlexGrid控件中的数据导出为Excel,这就是 vb与office数据之间的交互的大体步骤如下。

      使用office对象的方法

       1. 引用office对象库。

       2.创建Application(应用程序)对象。

       3.使用Application和其它子对象。

       4.关闭Application对象。

       下面我以MSFlexGrid控件中的数据和记录集对象的数据导出为Excel为例。

      1 首先确保 在工程中引用Microsoft Excel 14.0 Object Library   和  Microsoft ActiveX Data Objects 2.6 Libray

      代码仅供参考

<strong><span style="font-size:18px;"></span></strong><pre name="code" class="html"><strong><span style="font-size:18px;">Private Sub cmd_Click() </span></strong>
Dim xlsApp As Excel.Application '定义Excel程序
    Dim xlsBook As Excel.Workbook '定义工作簿
    
    Dim xlsSheet As Excel.Worksheet '定义工作表
    Dim i As Long
    Dim j As Long

    Set xlsApp = CreateObject("Excel.Application") '创建应用程序
    Set xlsBook = xlsApp.Workbooks.Add
    Set xlsSheet = xlsBook.Worksheets(1) '设置应用表

    With xlsApp
          .Rows(1).Font.Bold = True
    End With
    '把MSFlexGrid1的内容写入到电子表格中
    For i = 0 To MSFlexGrid1.Rows - 1
        For j = 0 To MSFlexGrid1.Cols - 1
            xlsSheet.Cells(i + 1, j + 1) = "'" & MSFlexGrid1.TextMatrix(i, j)
        Next j
    Next i

    xlsApp.Visible = True '显示电子表格
    xlsSheet.PrintOut preview:=True '进入打印预览页面
    xlsBook.SaveAs App.Path & "\Test.xls" '保存路径和文件名称
    Set xlsApp = Nothing '释放控制权
<strong><span style="font-size:18px;">End Sub</span></strong>

     以上的代码是直接进入打印预览界面,如果想直接得到电子表格,可将 xlsSheet.PrintOut preview:=True这行代码

注释掉。

        MSFlexGrid控件中的数据导出为Excel表格的方法有很多,我觉得它们都大同小异,总起来说就是vb先调用Excel,然后再将数据导入进去。

       2 从记录集中导出

<strong><span style="font-size:18px;"><strong><span style="font-size:18px;">   
   Dim i As Integer  
   Dim txtSQL  As String  
   Dim MsgText As String  
   Dim mrc As ADODB.Recordset  
'导出为Excel  
Private Sub cmd_Click()  
    Dim xlapp1 As Excel.Application  
    Dim xlbook1 As Excel.Workbook  
    Dim xlsheet1 As Excel.Worksheet  
  
    Set xlapp1 = CreateObject("Excel.Application")  
    Set xlbook1 = xlapp1.Workbooks.Add  
    Set xlsheet1 = xlbook1.Worksheets(1)  
        '添加字段名  
    
    For i = 0 To mrc.Fields.Count - 1  
        xlsheet1.Cells(1, i + 1) = mrc.Fields(i).Name  
    Next i  
  
    mrc.MoveFirst  
    xlsheet1.Range("A2").CopyFromRecordset mrc      
    mrc.Close  
    Set mrc = Nothing  
    xlapp1.Visible = True  
    Set xlapp1 = Nothing  
End Sub

</span></strong>

  3 将函数定义在模块中,然后在窗体中再调用它,这样不仅省时间省代码,还有利于提高系统的稳定性。

<strong><span style="font-size:18px;"><strong><span style="font-size:18px;">'MSHFlexGrid控件导出到Excel
Public Sub OutDataToExcel(Flex As MSFlexGrid) '导出至Excel
      Dim s As String
      Dim i As Integer
      Dim j As Integer
      Dim k As Integer
      
On Error GoTo Ert
      Dim Excelapp As Excel.Application       ’定义并引用Excel程序
      Set Excelapp = New Excel.Application
      
On Error Resume Next
      DoEvents
      Excelapp.SheetsInNewWorkbook = 1
      Excelapp.Workbooks.Add
      Excelapp.ActiveSheet.Cells(1, 3) = s
      Excelapp.Range("C1").Select
      Excelapp.Selection.Font.FontStyle = "Bold"
      Excelapp.Selection.Font.Size = 16
      With Flex                                '将数据导入到Excel中
      k = .Rows
      For i = 0 To k - 1
         For j = 0 To .Cols - 1
             DoEvents
             Excelapp.ActiveSheet.Cells(3 + i, j + 1) = "'" & .TextMatrix(i, j)
         Next j
      Next i
      
      End With
      
      Excelapp.Visible = True
      'Excelapp.Sheets.PrintPreview
Ert:
     If Not (Excelapp Is Nothing) Then
        'Excelapp.Quit
      End If
    
End Sub</span></strong></span></strong>

      比较这三种方法,都可以把数据从vb中导出到Excel中,殊途同归,都差不多吧,我个人建议大家使用第三种方法,这样可以节约大量的时间,而且还能提高系统的稳定性。

      其实我们引用对象库后,大多数都需要将其中的对象先创建,在使用,最后释放。像我们之前学习的记录集对象(Recordset),还有现在的Excel,在引用Microsoft Excel 14.0 Object Library 并使用它的时候,最难的地方在于Application和其它子对象的使用,因为我们没怎么接触过,所以感觉陌生,不过没有关系,我们先大体的了解它,然后慢慢琢磨,学习吗,就是先开始盲人摸象。