【问题标题】:How do I access an Excel named table via ADO/ODBC?如何通过 ADO/ODBC 访问 Excel 命名表?
【发布时间】:2010-07-23 15:23:16
【问题描述】:

我有一个包含多个工作表的工作簿,并在工作簿中创建了命名表(非范围)。出于说明目的,这些表名是 tblA、tblB 和 tblC。我无法找到通过 ADO 或 ODBC 查询这些表的方法。我可以访问命名范围,但这不适用于我的需要。

谢谢!

【问题讨论】:

    标签: excel ado.net


    【解决方案1】:

    我不知道是否可以直接完成,但有兴趣看看是否有人回来提供工作方法。 ADO 的 GetSchema 集合似乎只获取工作表名称和命名范围,而不是命名表所在的 ListObjects。以下是一种解决方法,但这意味着打开 Excel 以查找表的标题/数据范围。使用 ADO 或类似方法几乎没有意义,因为您可以直接复制数据,但我想您可以在保存为一次性任务之前转换为命名范围?

    Option Explicit
    
    Sub test()
    Dim WB As Workbook, WS As Worksheet, strExcelfile As String, strSheetName As String
    Dim strTableName As String, objListObj As ListObject, HeaderRange As String
    Dim strSQL As String, DataRange As String
    
    strExcelfile = "C:\Users\osknows\Desktop\New folder\test.xlsm"
    strSheetName = "Sheet1"
    strTableName = "TableName"
    
    
    Set WB = GetObject(strExcelfile) 'Filepath & Filename
    Set WS = WB.Sheets(strSheetName) 'SheetName
    Set objListObj = WS.ListObjects(strTableName) 'Table Name
    
    'get range of Table
    HeaderRange = objListObj.HeaderRowRange.Address
    DataRange = objListObj.DataBodyRange.Address
    
    'write data directly if required
    With ThisWorkbook
        With Sheet1
        '.Range(HeaderRange).Value = WS.Range(HeaderRange).Value
        '.Range(DataRange).Value = WS.Range(DataRange).Value
        End With
    End With
    
    'or use ADODB which is a bit pointless now!
    Dim cnn1 As New ADODB.Connection
    Dim rst1 As New ADODB.Recordset
    
    cnn1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & strExcelfile & ";" & _
        "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"
    
    strSQL = "SELECT * FROM [" & strSheetName & "$" & Replace(DataRange, "$", "") & "];"
    rst1.Open strSQL, cnn1, adOpenStatic, adLockReadOnly
    
    
    'tidy up
    Set objListObj = Nothing
    Set WS = Nothing
    WB.Close
    Set WB = Nothing
    End Sub
    

    【讨论】:

    • 这看起来很棒。如果在关闭时没有更好的答案,那么赏金就是你的 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多