我试图在Excel中处理巨大的CSV(〜165 MB,〜500K行),并决定使用ACE Text Driver。我已经知道我需要create special section.ini file到程序文件旁边。到目前为止,一切都很好。 说,我有以下CSV:
ID;VAL1 JSNT;6,00
Section.ini 文件:
[test.csv] Format=Delimited(;) ColNameHeader=True
VBA代码:
Sub GetEntries()
Dim file_path$, conn_string$, sql$
Dim rs As ADODB.Recordset
conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & "\;" & _
"Extended Properties=Text;"
sql = "SELECT * FROM [test.csv];"
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open sql, conn_string, adOpenForwardOnly, adLockReadOnly, adCmdText
wksOutput.Range("A1").CopyFromRecordset rs
End Sub
此代码有效,但请看一下结果:
换句话说,文本驱动程序将数字转换为日期!我以为这是关于Excel的,它的转换有些曲折,但是我确定原因是文本驱动程序。一切都很简单-我刚刚检查了该字段的Type
属性-它是adDate
(7)。因此,Excel与它无关。
但是有关section.ini的页面说我可以手动设置字段类型,因此我将这一行添加到section.ini中:
Col2=VAL1 Double
Col2
表示第二个字段,Double
是该字段的类型。但是...它也不起作用!
经过一些测试,我发现了以下内容。如果满足以下条件,则该数字将转换为日期:
6,00
符合此条件,因此已转换为日期。任何想法如何解决这个问题?还是我做错了什么?
正如@ shrivallabha.redij所指出的,我可以将接收列的类型设置为Text。但这不是解决方案,因为我事先不知道哪些列会以这种方式运行。