用VB 代码读取 Excel 内容

引子

常规的方法可能是循环读取每一行每一个格子的内容并存入 Recordset 并保存
此处使用Open Recordset 的方式,将 Excel Worksheet 作为一个数据源直接读取
速度将是数量级的差别,几万笔记录的情况下,将由几十秒,甚至几分钟,加快至几秒钟

解决代码

'导入Excel 文件内容
'Excel 格式为 Excel 2007 之上的 .xlsx 格式,需使用 ACE 读取
'其中的 HDR=No (Yes) 代表是否处理第一行的标题行
Private Function ImportExcelSheetData(ByVal p_sExcelFilePath As String, ByVal p_sSheetName As String) As Boolean
    On Error GoTo errHandler

    ImportExcelSheetData = False

    Dim cn As New ADODB.Connection
    Set m_rstImportData_Excel = New ADODB.Recordset

    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & p_sExcelFilePath & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"

    m_rstImportData_Excel.Open "SELECT * FROM [" & p_sSheetName & "$]", cn, adOpenStatic, adLockOptimistic

    ImportExcelSheetData = True

errHandler:
    If Err.Number <> 0 Then
        Screen.MousePointer = vbDefault
        MsgBox Err.Description, vbOKOnly + vbExclamation, "ImportExcelSheetData"
    End If
End Function

可能的问题

  • 有时会出现读取到记录,但实际内容却为 Empty 的情况
  • 有时则出现读取到内容,但在后续使用时其中的值均变为 Empty 的情况

解决方法

  1. <推荐>最大的可能是因为在使用 Recordset.Open() 方式打开Excel 文件时,那个文件已经被 Excel Application 打开,故有时会导致此情况,最简单的办法即在使用Open()方式之前关闭Excel Object;
  2. 另一个方法是完全处理完成数据(如保存至DB Table)后,再关闭或释放Excel Object
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章