这两天弄机房收费系统的时候,用到了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和其它子对象的使用,因为我们没怎么接触过,所以感觉陌生,不过没有关系,我们先大体的了解它,然后慢慢琢磨,学习吗,就是先开始盲人摸象。