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