用VB 代码读取 Excel 内容

前端之家收集整理的这篇文章主要介绍了用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

猜你在找的VB相关文章