Excel ADODB记录集256字符长度问题

Excel ADODB记录集256字符长度问题,excel,vba,Excel,Vba,我在64位Windows机器上运行记录集代码,使用32位excel,而数据检索仅检索256个字符 此代码正在从excel工作表“测试计划”中读取数据,它包含的某些列包含的数据超过256个字符。目前,它仅检索这些列的256个字符 我需要检索包含任意数量字符的整个数据 我尝试了以下解决此问题的选项: 我已尝试将系统注册表“TypeGuessRows”更新为0,但它在我的计算机上不起作用 我已将列格式更改为“常规” Sconnect = "Provider=MSDASQL.1;DSN=Excel Fi

我在64位Windows机器上运行记录集代码,使用32位excel,而数据检索仅检索256个字符

此代码正在从excel工作表“测试计划”中读取数据,它包含的某些列包含的数据超过256个字符。目前,它仅检索这些列的256个字符

我需要检索包含任意数量字符的整个数据

我尝试了以下解决此问题的选项:

  • 我已尝试将系统注册表“TypeGuessRows”更新为0,但它在我的计算机上不起作用

  • 我已将列格式更改为“常规”

    Sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';IMEX=1"
    
    conn.Open Sconnect
    
    Query = "Select * from [Test Plan$] where [Optimized Scenario No] = '" + OptimizedScenarioNo + "' and [Type] = 'Today' order by [Seq]"
            rsOptimizedScenarioCreation.Open Query, conn
    
  • 实际结果:

    此代码正在从excel工作表“测试计划”中读取数据,它包含的某些列包含的数据超过256个字符。目前,它仅检索这些列的256个字符

    预期结果

    我需要检索包含任意数量字符的完整数据。

    要清楚:
    这只是一个解决方法,因为您使用Excel作为Excel的数据源


    您可以根据SQL语句对数据源工作表进行筛选和排序,并将剩余的可见范围用于其他目的,例如。G要将其复制到其他图纸,请执行以下操作:

    Private Sub CopyWithoutSQL()
        Dim ws As Worksheet
        Dim n As Long
        Dim OptimizedScenarioNo As String
    
        Set ws = ActiveWorkbook.Sheets("Test Plan")
        OptimizedScenarioNo = "whatever"
    
        ' switch all filters off
        If Not ws.AutoFilterMode Then ws.Rows(1).AutoFilter
        If ws.AutoFilter.FilterMode Then ws.ShowAllData
    
        ' filter according to SQL statement
        n = ws.Range("1:1").Find(What:="Optimized Scenario No", After:=Range("A1")).Column
        ws.UsedRange.AutoFilter Field:=n, Criteria1:="=" & OptimizedScenarioNo
        n = ws.Range("1:1").Find(What:="Type", After:=Range("A1")).Column
        ws.UsedRange.AutoFilter Field:=n, Criteria1:="Today"
    
        ' sort according to SQL statement
        n = ws.Range("1:1").Find(What:="Seq", After:=Range("A1")).Column
        With ws.Sort
            .SortFields.Clear
            .Header = xlYes
            .SortFields.Add key:=Columns(n), SortOn:=xlSortOnValues, Order:=xlAscending
            .SetRange ws.UsedRange
            .Orientation = xlTopToBottom
            .Apply
            .SortFields.Clear
        End With
    
        ' use the remaining visible range, e. g. copy it to somewhere
        ws.UsedRange.Copy ActiveWorkbook.Sheets(2).Range("A1")
    End Sub
    
    需要说明的是:
    这只是一个解决方法,因为您使用Excel作为Excel的数据源


    您可以根据SQL语句对数据源工作表进行筛选和排序,并将剩余的可见范围用于其他目的,例如。G要将其复制到其他图纸,请执行以下操作:

    Private Sub CopyWithoutSQL()
        Dim ws As Worksheet
        Dim n As Long
        Dim OptimizedScenarioNo As String
    
        Set ws = ActiveWorkbook.Sheets("Test Plan")
        OptimizedScenarioNo = "whatever"
    
        ' switch all filters off
        If Not ws.AutoFilterMode Then ws.Rows(1).AutoFilter
        If ws.AutoFilter.FilterMode Then ws.ShowAllData
    
        ' filter according to SQL statement
        n = ws.Range("1:1").Find(What:="Optimized Scenario No", After:=Range("A1")).Column
        ws.UsedRange.AutoFilter Field:=n, Criteria1:="=" & OptimizedScenarioNo
        n = ws.Range("1:1").Find(What:="Type", After:=Range("A1")).Column
        ws.UsedRange.AutoFilter Field:=n, Criteria1:="Today"
    
        ' sort according to SQL statement
        n = ws.Range("1:1").Find(What:="Seq", After:=Range("A1")).Column
        With ws.Sort
            .SortFields.Clear
            .Header = xlYes
            .SortFields.Add key:=Columns(n), SortOn:=xlSortOnValues, Order:=xlAscending
            .SetRange ws.UsedRange
            .Orientation = xlTopToBottom
            .Apply
            .SortFields.Clear
        End With
    
        ' use the remaining visible range, e. g. copy it to somewhere
        ws.UsedRange.Copy ActiveWorkbook.Sheets(2).Range("A1")
    End Sub
    

    您从哪个应用程序运行VBA代码可能重复?@Asger我在excel工作表中使用此代码从另一个工作表中读取一些数据可能从哪个应用程序运行VBA代码重复?@Asger我在excel工作表中使用此代码从另一个工作表中读取一些数据使用excel文件作为ADO的数据源这与在Excel中打开它并使用Excel对象模型非常不同。@GSerg当然,但OP说“我在Excel工作表中使用这段代码从另一个工作表中读取一些数据”。所以这可能是一个解决办法。谢谢@GSerg…我的问题可以用你建议的方法解决!!!(再次)澄清一下,我建议的方法是:)使用excel文件作为ADO的数据源与在excel中打开它并使用excel对象模型是非常不同的。@GSerg当然,但OP说“我在excel工作表中使用此代码从另一个工作表中读取一些数据”。所以这可能是一个解决办法。谢谢@GSerg…我的问题可以用你建议的方法解决!!!我(再一次)明确地说,我建议的方法是:)