发布CSV文件中的阅读内容。 +和 – 正在读取的字符为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是一种有这种东西的野兽。 与其字段types作为元数据一部分的普通数据库不同,CSV只是数据。 因此,ACE必须对数据types做出决定。 在你的情况下,ACE决定这是一个数字,因为它以+
或-
开头。 如果我没有记错,ACE和JET前辈只分析前8个logging来确定字段types。
有两种方法可以解决这个问题。
-
您可以使用schema.ini文件。 基本上这是一个名为
schema.ini
的文本文件,您只需将其保存在与要连接的数据相同的文件夹中即可。 如果存在,ACE将自动使用该文件。 这里有一些关于如何build立它的信息 (你可以谷歌,并获得大量的例子)。 -
这是一种创可贴的方式,根据你的情况,这有时比schema.ini更容易。 由于ACE仅分析CSV的前8个logging以确定字段types,因此只需在文件顶部插入8个具有明确字段types的新logging。 例如,您的字段包含
+
或-
只是像S
一样的字符。 ACE会看到这是一个非数字字段,并将其视为一个string。 你可以在这里看到如何使用文件系统对象 (和谷歌获取更多信息,这是非常有用的东西) 预先数据到现有的文本文件 ,
+/-正在强制进行数字转换,并且您正在失去符号,而仅仅是纯粹的math等价物,在两种情况下都是零。
您可以尝试使用适当的Schema.ini来详细说明字段types。 如果这是不可能的,放弃ADODB.Connection并使用Workbooks.OpenText方法 。 将该列的xlColumnDataType指定为xlTextFormat(例如2 )。