在Excel中更改连接字符串会弄乱列数据类型

在Excel中更改连接字符串会弄乱列数据类型,excel,vba,odbc,type-conversion,Excel,Vba,Odbc,Type Conversion,这与我的工作有关。我正在尝试在Excel中更新文本文件(由多个透视表使用)的外部数据连接,以指向正确的数据源,以便在将Excel工作簿和文本文件复制到其他目录/计算机时刷新数据。(它应该像文本文件的路径是相对的。) 数据源是以制表符分隔的文本文件,标题位于第一列。我有一些代码可以更改ODBC连接字符串中的路径,但当我尝试刷新数据时,Excel会将其全部作为文本导入,而不会像最初那样保留某些列的数字 Public Sub Test() Dim wb As Excel.Workbook

这与我的工作有关。我正在尝试在Excel中更新文本文件(由多个透视表使用)的外部数据连接,以指向正确的数据源,以便在将Excel工作簿和文本文件复制到其他目录/计算机时刷新数据。(它应该像文本文件的路径是相对的。)

数据源是以制表符分隔的文本文件,标题位于第一列。我有一些代码可以更改ODBC连接字符串中的路径,但当我尝试刷新数据时,Excel会将其全部作为文本导入,而不会像最初那样保留某些列的数字

Public Sub Test()
    Dim wb As Excel.Workbook
    Dim pc As PivotCache
    Dim path As String

    Set wb = ActiveWorkbook
    path = wb.path

    For Each pc In wb.PivotCaches
        'Debug.Print pc.Connection
        pc.Connection = "ODBC;DBQ=" & path & ";DefaultDir=" & path & ";Driver={Microsoft Text Driver (*.txt; *.csv)};DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes"

    Next
End Sub
我试着将
MaxScanRows
改为零,我在某个地方读到过,Excel会扫描所有行以猜测数据类型,但这似乎没有帮助

原始连接信息为:

连接字符串:

DefaultDir=C:/directoryPath;Driver={Microsoft Text Driver (*.txt; *.csv)};
  DriverId=27;FIL=text;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;
  SafeTransactions=0;Threads=3;UserCommitSync=Yes;
命令文本:

SELECT *
FROM tableName.txt tableName
使用数据透视表向导(外部数据->MS文本驱动程序)创建连接时,我设置了所有导入/解析信息(制表符分隔、第一行的列标题、猜测数据类型等)


是否有任何方法可以(1)让Excel查看行并找出数据类型,(2)手动为每列的数据类型编写代码,(3)保留最初使用的相同数据类型,或(4)刷新数据后,在宏中遍历数据透视表并将所有数字转换为数值而不是文本?显然(1)或(3)看起来最简单、最有意义,但我愿意尝试其他选项。

根据您的要求,使用schema.ini似乎是最好的选择

例如:

[mycsv.csv]
Format=Delimited(|)
NumberDigits=2
CurrencyThousandSymbol=,
CurrencyDecimalSymbol=.
CurrencyDigits=2
DateTimeFormat="yyyy-mm-dd"

Col1=ADate Date
Col2=AText Text

您的数据是否混合?您只能通过篡改注册表将MaxScanRows设置为零。然后需要将IMEX设置为1。您可以使用schema.ini,它适用于常见的记录集,但我还没有使用透视表进行测试。@Remou我的一些列是文本列,其他列是数字列。我需要能够将整个项目复制到另一台计算机上,并且仍能正常工作,因此篡改注册表似乎不太实际。您将如何(潜在地)使用schema.ini来实现这一点?在VBA中无法执行此操作吗?您可以将文本复制到excel中的各种工作表中,而不是复制到文本文件中,并在VBA中引用excel工作表。schema.ini也是VBA。混合数据意味着同一列中的不同数据,而不是不同列中的不同数据。您可以在这里找到schema.ini的示例更多:谢谢。我无法先将其复制到Excel中,因为Excel中的行太多。我将尝试schema.ini,然后再联系您!