用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章