我在.csv
文件中有以下行:
1234;Einkauf;26.08.2015;137873;616005;50308;Hiag;4100000;Place Rd. 8, 9999 Ort, HST;;;Test Place Rd. Ort;2000;VSM80;185.05;12;155.55;0.02
我运行以下代码:
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited"";"
sQuery = vbNullString
sQuery = sQuery & "SELECT * FROM " & strFileName
sQuery = sQuery & ";"
rs.Open sQuery, cn
If Not (rs.EOF Or rs.BOF) Then
If InclHeaders = False Then rs.Move 1
ReDim rsArr(1 To 1)
i = 1
Do While Not rs.EOF
ReDim Preserve rsArr(1 To i)
For j = 0 To rs.Fields.Count - 1
rsArr(i) = Trim(rsArr(i)) & " " & rs.Fields(j)
Next j
i = i + 1
rs.MoveNext
Loop
End If
一旦到达这里,前两次都很好:
rsArr(i) = Trim(rsArr(i)) & " " & rs.Fields(j)
第三个字段返回0但不应该,因此rsArr(i)
的值为1234;Einkauf;26.08.2015;137873;616005;50308;Hiag;4100000;Place Rd. 8, 9999 Ort
我不知道为什么会这样。它遍历字段,所以它不会在第二个字段后停止。
[该文件有两个标题行,这就是我移动rs
的原因。但这并不重要,因为无论有多少标题行,错误都会发生。
编辑:前五行(如果我删除前两个标题行,我会遇到同样的问题,所以要小心对待)。
; Auftrag: 9161779,9162090,9162298,61601060,61601061,61601062,61601069,61601064,61601065,61601066,61601067
Konto;KontoBez;Datum;Blg Nr;OpNr;PkNr;PkName;Auftrag;AuftragText;Code;Vor;Buchungstext;G-Konto;MWST;BVS;BNS;NNS;Skonto
1234;Einkauf;10.10.2014;135729;14-02504;50309;Hofstetter;41401060;Place Rd. 8, 9999 Ort;;;Hofstetter Place Rd. 8, 9999 Ort;2000;VSM80;100.75;100.58;100.05;0.02
1234;Einkauf;10.10.2014;138182;1070011530;50326;Roto;41401060;Place Rd. 8, 9999 Ort;;;Roto Place Rd. 8, 9999 Ort;2000;VSM80;12.80;10.62;15.39;0.03
1234;Kunden 13;10.10.2014;5795;92140457;81853;;41401060;Place Rd. 8, 9999 Ort;;;AK:Place Rd. 8, 9999 Ort;1100;USt80;-12500.00;-12550.00;-12555.67;0
答案 0 :(得分:0)
这是在黑暗中拍摄的,但是有多个标题可能存在一些数据类型混淆?如果是这样,我认为扩展属性末尾的IMEX=1;
有助于管理具有不同数据类型的情况:
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
strPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited;IMEX=1"";"
如果这不起作用,可能会显示CSV文件的实际前5行,带标题和全部?它可能会跳出来。
作为替代方案,我无法帮助,但请注意您的数据文件似乎没有引用值。如果这在整个文件中是一致的,您可以采用惰性方法并将文件作为普通的分隔文件读取:
Dim fields() As String
Open strPath & "\" & strFileName for Input as #1
Do Until EOF(1)
Line Input #1, line
fields = Split(line, ",")
' your other stuff here
Loop
Close #1
通常需要注意的是,这与强大的CSV解析器相差甚远......