发布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。

有两种方法可以解决这个问题。

  1. 您可以使用schema.ini文件。 基本上这是一个名为schema.ini的文本文件,您只需将其保存在与要连接的数据相同的文件夹中即可。 如果存在,ACE将自动使用该文件。 这里有一些关于如何build立它的信息 (你可以谷歌,并获得大量的例子)。

  2. 这是一种创可贴的方式,根据你的情况,这有时比schema.ini更容易。 由于ACE仅分析CSV的前8个logging以确定字段types,因此只需在文件顶部插入8个具有明确字段types的新logging。 例如,您的字段包含+-只是像S一样的字符。 ACE会看到这是一个非数字字段,并将其视为一个string。 你可以在这里看到如何使用文件系统对象 (和谷歌获取更多信息,这是非常有用的东西) 预先数据到现有的文本文件 ,

+/-正在强制进行数字转换,并且您正在失去符号,而仅仅是纯粹的math等价物,在两种情况下都是零。

您可以尝试使用适当的Schema.ini来详细说明字段types。 如果这是不可能的,放弃ADODB.Connection并使用Workbooks.OpenText方法 。 将该列的xlColumnDataType指定为xlTextFormat(例如2 )。