Excel 在CSV文件中读取问题。+和-读取为0的字符
我遇到了一个相当奇怪的问题,即使用Microsoft.ACE.OLEDB.12.0引擎读取一个小的csv文件Excel 在CSV文件中读取问题。+和-读取为0的字符,excel,csv,oledb,vba,Excel,Csv,Oledb,Vba,我遇到了一个相当奇怪的问题,即使用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;" & _
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.Fields7时,哪个应为+或a-返回的值为0
我无法控制给定的csv文件,因此我无法将+或-字符更改为其他字符。ACE是一个处理此类内容的野兽。与将字段类型作为元数据一部分的普通数据库不同,CSV只是数据。因此,ACE必须决定数据类型。在您的情况下,ACE决定这是一个数字,因为它以+或-开头。如果我没记错的话,ACE和它的JET Preceptor只分析前8条记录来确定字段类型 但有两种方法可以解决这个问题 您可以使用schema.ini文件。基本上,这是一个名为schema.ini的文本文件,您只需将其与所连接的数据放在同一文件夹中即可。如果文件存在,ACE将自动使用该文件。你可以在谷歌上搜索,得到大量的例子
这是创可贴方法,它有时比StudioIi更容易,取决于您的情况。由于ACE仅分析CSV的前8条记录以确定字段类型,因此您可以在文件顶部插入8条具有确定字段类型的新记录。例如,您的字段包含+或-仅粘贴一个字符,如S.ACE,则会看到这是一个非数字字段,并将其视为字符串。谷歌提供更多信息,这是非常有用的东西
+/-强制进行数字转换,您将失去符号,转而使用其纯数学等价物,在这两种情况下均为零
您可以尝试使用适当的方法来详细说明字段类型。如果不可能,请放弃ADODB.Connection并使用。将该列指定为xlTextFormat,例如2。是的,我知道创建schema.ini文件会起作用,但我有大约53个csv文件要运行,根据我收集的信息,您不能在架构文件中使用通配符。我想我会创建一个默认的schema.ini,并在运行所有csv文件时更改文件名。我相信@jeeped建议使用Workbooks.OpenText可能不是一个坏方法。你可以把这些东西一个一个打开,然后抓取它们的值。唯一需要注意的是,如果您正在执行比“选择*自”更复杂的操作。另一种选择,又是一种创可贴,将使用FielSisteObjor将每个CSV移动到分离的文件夹中,快速重写Studio.In文件并将其移动到该文件夹,然后运行导入。您必须以编程方式编写schema.ini,但无论如何,它对于excel和VBA都可以很好地扩展。