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 条记录来确定字段类型。
虽然有两种解决方法。
您可以使用 schema.ini 文件。基本上这是一个名为 schema.ini
的文本文件,您只需将其粘贴在与要连接的数据相同的文件夹中。如果文件存在,ACE 将自动使用该文件。 Here's some info about how to build it(您可以 google 它并获得大量示例)。
这是创可贴的方法,有时比 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)。
我在使用 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 条记录来确定字段类型。
虽然有两种解决方法。
您可以使用 schema.ini 文件。基本上这是一个名为
schema.ini
的文本文件,您只需将其粘贴在与要连接的数据相同的文件夹中。如果文件存在,ACE 将自动使用该文件。 Here's some info about how to build it(您可以 google 它并获得大量示例)。这是创可贴的方法,有时比 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)。