0

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

4

1 回答 1

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 文件(文本文件驱动程序)

于 2012-08-27T16:35:40.200 回答