CSV 文件中的问题读取。 + 和 - 字符被读为 0

Issue reading in CSV file. + and - Characters being read as 0

我在使用 Microsoft.ACE.OLEDB.12.0 引擎读取一个小的 csv 文件时遇到了一个相当奇怪的问题。

    Dim cN As ADODB.Connection
    Dim RS As ADODB.Recordset
    Set cN = New ADODB.Connection
    Set RS = New ADODB.Recordset
    cN.Open ("Provider=Microsoft.ACE.OLEDB.12.0;" & _
               "Data Source=" & myPath & ";" & _
               "Extended Properties=""Text;HDR=NO;FMT=CSVDelimited""")
    RS.ActiveConnection = cN
   RS.Source = "select * from " & myfile
   RS.Open

当调用应该是“+”或“-”的 RS.Fields(7) 时,它返回值 0?

我无法控制给定的 csv 文件,所以我无法将“+”或“-”字符更改为其他字符。

ACE 是拥有这种东西的野兽。与将字段类型作为其元数据的一部分的普通数据库不同,CSV 只是数据。因此,ACE 必须决定数据类型。在您的情况下,ACE 决定这是一个数字,因为它以 +- 开头。如果我没记错的话,ACE 和它的 JET 前身只分析前 8 条记录来确定字段类型。

虽然有两种解决方法。

  1. 您可以使用 schema.ini 文件。基本上这是一个名为 schema.ini 的文本文件,您只需将其粘贴在与要连接的数据相同的文件夹中。如果文件存在,ACE 将自动使用该文件。 Here's some info about how to build it(您可以 google 它并获得大量示例)。

  2. 这是创可贴的方法,有时比 schema.ini 更容易,具体取决于您的情况。因为 ACE 只分析 CSV 的前 8 条记录来确定字段类型,所以您只需在文件顶部插入 8 条具有确定字段类型的新记录。例如,您的字段包含 +- 只需粘贴一个字符,如 S。然后 ACE 将看到这是一个非数字字段,并将其视为一个字符串。 You can see here how to prepend data to an existing text file using the filesystemobject(和 google 了解更多信息,这是非常有用的东西)

+/- 强制进行数值转换,您失去了符号,取而代之的是它的纯数学等价物,在两种情况下都为零。

您可以尝试使用合适的 Schema.ini that details the field types. If that is not possible, abandon the ADODB.Connection and use the Workbooks.OpenText method. Specify that column's xlColumnDataType 作为 xlTextFormat(例如 2)。