【前言】
最近在敲机房的 [学生查看上机记录] 时,遇到一个问题,它需要将从数据库查到的记录(有一条或多条)导出为Excel表格,于是我添加了MSHFlexgrid控件,为什么不用MSFlexgrid控件呢?因为这是老版本的控件了,这个控件存在一些不足,它很难将字段都居中显示。之后,在导出为Excel的过程中,遇到了很多问题,下面给大家分享一下这些难忘的经历。
【正文】
第一步:引用函数 Microsoft Excel 16.0 Object Library
①我就是在这遇到了问题,我的VB中没有Microsoft Excel 16.0 Object Library这条函数,一直从部件里面找,找不到,后来才从引用里面找,不过——仍然没找到。找不到这个函数怎么办呢?可以点击浏览,打开 C:Program Files (x86)Microsoft Office ootOffice16EXCEL.EXE 路径,根据office安装位置的不同,路径可能会有差别。打开后你会发现,这条函数神奇的出现了!
[引用和部件的区别]
"引用"一般是引用函数,这些函数一般封装在dll文件中的,在VB中看不到这些函数,像经常用的API函数,也包括自己封装的函数.
"部件"一般是指控件,在VB可以看见这些控件,有一个图标,一般是ocx文件.
②但是当我欣喜按了下F5,这个可怕的三连报错又出现了,先是Excel遇到错误,接着部件要求挂起,然后ActiveX部件不能创建对象,这个报错的窗体还关不了,还得强制结束它。明明引用了这个函数,还是不行,也改了兼容性,还是不行,想到装固态之前那个系统盘里可能还有一些Office的残留文件对它造成了影响,于是我把系统盘格式化后,卸载了当前office,重装了一下,结果就好了!
第二步:编写模块代码
'将MSHFlexGrid中数据导出到Excel
Public Function ExportToExcel(myflexgrid As MSHFlexGrid)
On eror GoTo ErrorMsg
Dim xlApp As Object '声明Object类对象 后期绑定
Dim xlBook As Object
Dim rows As Integer '总行数
Dim cols As Integer '总列数
Dim irow As Integer
Dim hcol As Integer
Dim icol As Integer
If myflexgrid.rows <= 1 Then '判断有无数据
MsgBox "没有数据!", vbInformation, "提示"
Exit Function
Else
If xlApp Is Nothing Then
Set xlApp = CreateObject("Excel.Application") '生成新的对象引用,引用Excel
End If
Set xlBook = xlApp.Workbooks.Add '创建空白的工作簿
xlApp.Visible = True 'Excel可见
With myflexgrid
rows = .rows
cols = .cols
irow = 0
icol = 1
For hcol = 0 To cols - 1 '列循环
For irow = 1 To rows '行循环
xlApp.Cells(irow, icol).Value = .TextMatrix(irow - 1, hcol)
'将表中数据送到Excel
Next irow
icol = icol + 1
Next hcol
End With
With xlApp
.rows(1).Font.Bold = True '第一行为粗体
.Cells.Select '选择整个工作表
.Columns.AutoFit '自动调整列宽以适应文字
.Cells(1, 1).Select '
End With
xlApp.DisplayAlerts = False '关闭工作表,不提示用户保存
Set xlApp = Nothing '释放xlApp对象
Set xlBook = Nothing '释放xlBook对象
Exit Function
End If
ErrorMsg:
MsgBox "当前无法导出为Excel!", vbOKOnly + vbExclamation, "提示"
End Function
第三步:在窗体中调用模块
Private Sub EportToExcel_Click()
Call ExportToExcel(MSHFlexGrid1)
End Sub
【最后】
只要功夫深,铁杵磨成针!