这与我的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)似乎是最简单的,也是最有意义的,但我愿意尝试其他选择。
答案 0 :(得分:1)
根据您的要求,使用schema.ini似乎是最好的选择。
例如:
[mycsv.csv]
Format=Delimited(|)
NumberDigits=2
CurrencyThousandSymbol=,
CurrencyDecimalSymbol=.
CurrencyDigits=2
DateTimeFormat="yyyy-mm-dd"
Col1=ADate Date
Col2=AText Text