我目前正在使用VBA脚本将CSV表格传输到Access(从Excel内部)
objAccess.DoCmd.TransferText acImportDelim, "", _
"table1", "C:\donPablo\StackOverFlow\StackCSV.csv", True
问题是Access错误地为我的列定义了类型。 我的一些列包含文本和数字行,这就是为什么有一半导入被错误代码损坏的原因:"类型转换失败"
我已经在网上看到你可以通过
解决这个问题objAccess.DoCmd.RunSQL"创建表" + cstrTable +"(id Text);"
那不起作用。同样的错误。
好像有某种"聪明的"在Access内部进行转换,我无法绕过它。 绕过此转换的唯一可能方案是使用以下逻辑转换CSV文件中的所有条目:
在:
value1,value2," value3",value4
在
" value1"," value2"," value3"," value4"
有没有办法做这个操作?某种正则表达式可能吗?
答案 0 :(得分:1)
我为上述问题创建了一个硬编码解决方案(没有正则表达式)
Dim current_Char As Variant
ignoretext = False
For Counter = 1 To Len(currentLine)
current_Char = Mid(currentLine, Counter, 1)
next_Char = Mid(currentLine, Counter + 1, 1)
If ignoretext = False And current_Char = """" Then 'opening of existing quote
ignoretext = True
newLine = newLine & current_Char
ElseIf ignoretext = True And current_Char = """" Then 'ending of existing quote
ignoretext = False
newLine = newLine & current_Char
ElseIf ignoretext = True Then
newLine = newLine & current_Char
ElseIf ignoretext = False Then
If current_Char = "," Then
If last_Char <> """" Then
newLine = newLine & """"
End If
newLine = newLine & current_Char
If next_Char <> """" Then
newLine = newLine & """"
End If
Else
newLine = newLine & current_Char
End If
Else
newLine = newLine & current_Char
End If
last_Char = current_Char
Next
If Mid(currentLine, 1, 1) <> """" Then
newLine = """" & newLine
End If
If Mid(currentLine, Len(currentLine), 1) <> """" Then
newLine = newLine & """"
End If
某些变量定义可能会丢失,但逻辑仍然存在;)
基本上是做什么的:
前
&#34; fsdf,dfafs&#34;,val,&#34;,fsd&#34;,156,fsd
后
&#34; fsdf,dfafs&#34;,&#34; val&#34;,&#34;,fsd&#34;,&#34; 156&#34;,&#34; fsd&#34;
您的所有字段现在都是文字类型;)
玩得开心