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