VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示

1.VB高效导入Excel2003和Excel2007文件到MSHFlexGrid控件显示

2.以前也有Excel导入通用功能,但速度有些慢一会把两种实现方式都提供出为参考对比。

一、原通用导入excel文件到MSHFlexGrid控件如下:

Public Function DRExcel(fd As MSHFlexGrid, CD1 As CommonDialog) As Boolean   '导入Excel文件函数  20120621孙广乐

Dim file_name As String
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.worksheet
Dim xlQuery As Excel.QueryTable
Dim r   'r为行数
Dim i, j
On Error GoTo a:
file_name = ""
fnum = FreeFile
CD1.Flags = &H2
With CD1
  .Flags = cdlOFNHideReadOnly & cdlOFNOverwritePrompt
  ' 设置过滤器
  .Filter = "xls文档(*.xls)|*.xls|xlsx文档(*.xlsx)|*.xlsx"        '只能导入xls这种文件格式
   ' 指定缺省的过滤器
  .FilterIndex = 1
  '.ShowSave
  .ShowOpen
  file_name = .filename
End With

If file_name = "" Then       '判断文件是否存在
  DRExcel = False
  Exit Function
End If
    
Set xlApp = CreateObject("Excel.Application")
Set xlBook = Nothing
Set xlSheet = Nothing
Set xlBook = xlApp.Workbooks().Add
Set xlSheet = xlBook.Worksheets("sheet1")
'xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Open(file_name)
Set xlSheet = xlBook.Worksheets(1)
    
'测列数
j = 1
Do While xlSheet.Cells(1, j) <> ""
 j = j + 1
Loop
i = 1
Do While xlSheet.Cells(i, 1) <> ""
 i = i + 1
Loop
If j = 1 Or i = 1 Then
  MsgBox "不允许导入空表!"
  DRExcel = False
  Exit Function
End If

fd.Visible = True
fd.rows = i - 1
fd.Cols = j - 1
    
For i = 1 To fd.rows
     
  For j = 1 To fd.Cols  '列数
         fd.TextMatrix(i - 1, j - 1) = xlSheet.Cells(i, j)
  Next j
Next i
    
'xlApp.Application.Visible = True

xlBook.Close
xlApp.Quit   '"交还控制给Excel

fd.ColAlignment(0) = 0 '物品代码
MsgBox "完成导入"
fd.FixedRows = 1
fd.FixedCols = 0
CD1.filename = ""
DRExcel = True
a:
End Function

二、新方法,高效把excel文件导入到MSHFlexGrid控件。这个非常高效。如下:

FGrid1.FixedCols = 0

Dim file_name As String
file_name = ""
CD1.Flags = &H2
With CD1
  .Flags = cdlOFNHideReadOnly & cdlOFNOverwritePrompt
  ' 设置过滤器
  .Filter = "xls文档(*.xls)|*.xls|xlsx文档(*.xlsx)|*.xlsx"        '只能导入xls这种文件格式
   ' 指定缺省的过滤器
  .FilterIndex = 1
  '.ShowSave
  .ShowOpen
  file_name = .filename
End With

If file_name = "" Then       '判断文件是否存在
    MsgBox ("选择的文件已经不存在了")
  Exit Sub
End If


Dim excelid As Excel.Application
    Set excelid = New Excel.Application
    excelid.Workbooks.Open (file_name)
    
    excelid.ActiveWindow.SplitRow = 0
    excelid.ActiveWorkbook.save
    excelid.ActiveWorkbook.Close
    excelid.Quit

Dim CHART1 As New ADODB.Connection, chart2 As New ADODB.Recordset
    CHART1.CursorLocation = adUseClient
    
    If Right(file_name, 5) = ".xlsx" Then 'excel2007版本以上
        CHART1.Open "Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;Data Source=" & file_name & ";Extended Properties='Excel 12.0;HDR=Yes'"
    Else
        CHART1.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & file_name & ";Extended Properties='Excel 8.0;HDR=Yes'"
    End If
    Dim rs As ADODB.Recordset
    Set rs = CHART1.OpenSchema(adSchemaTables)
    Dim ls_name As String
    ls_name = rs.Fields(2).Value '取哪个sheet页数据
    chart2.Open "select * From [" & ls_name & "]", CHART1, adOpenKeyset, adLockOptimistic
    Set FGrid1.DataSource = chart2

Set CHART1 = Nothing
Set chart2 = Nothing
    

作者:王春天  2013.11.14  地址:http://www.cnblogs.com/spring_wang/p/3423105.html

posted @ 2013-11-14 13:08  王春天  阅读(2560)  评论(0编辑  收藏  举报
云推荐