Microsoft ACE文本驱动程序将数字转换为日期

时间:2019-03-21 07:43:27

标签: excel vba csv parsing

我试图在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

此代码有效,但请看一下结果: AceTextDriverConvertsNumberToDate

换句话说,文本驱动程序将数字转换为日期!我以为这是关于Excel的,它的转换有些曲折,但是我确定原因是文本驱动程序。一切都很简单-我刚刚检查了该字段的Type属性-它是adDate(7)。因此,Excel与它无关。 但是有关section.ini的页面说我可以手动设置字段类型,因此我将这一行添加到section.ini中:

Col2=VAL1 Double

Col2表示第二个字段,Double是该字段的类型。但是...它也不起作用! 经过一些测试,我发现了以下内容。如果满足以下条件,则该数字将转换为日期:

  1. 小数点前的数字在0到23(含)之间
  2. 小数点后的数字在00到59之间(包括) 如您所见,数字6,00符合此条件,因此已转换为日期。

任何想法如何解决这个问题?还是我做错了什么?

更新

正如@ shrivallabha.redij所指出的,我可以将接收列的类型设置为Text。但这不是解决方案,因为我事先不知道哪些列会以这种方式运行。

0 个答案:

没有答案