在Excel中更改连接字符串会使列数据类型变得混乱

时间:2012-08-27 06:23:50

标签: excel vba odbc type-conversion

这与我的previous question有关。我正在尝试在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)似乎是最简单的,也是最有意义的,但我愿意尝试其他选择。

1 个答案:

答案 0 :(得分:1)

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

例如:

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

Col1=ADate Date
Col2=AText Text

Schema.ini File (Text File Driver)