【发布时间】:2014-03-18 14:56:52
【问题描述】:
我目前正在使用 VBA 脚本将 CSV 表传输到 Access(从 Excel 内部)
objAccess.DoCmd.TransferText acImportDelim, "", _
"table1", "C:\donPablo\StackOverFlow\StackCSV.csv", True
问题是 Access 错误地为我的列定义了类型。 我的一些列有文本和数字行,这就是为什么一半的导入损坏并出现错误代码:“类型转换失败”
我在网上看到你可以解决这个问题
- 使用完全相同的名称和预定义的列类型创建表
objAccess.DoCmd.RunSQL "CREATE TABLE" + cstrTable + "(id Text);"
那没用。同样的错误。
- 将文本类型的第一列添加到 CSV 文件中 所以我添加了一行是 100% 的文本。同样的错误。
似乎 Access 内部正在进行某种“聪明”的转换,我无法绕过它。 绕过此转换的唯一可能方案是使用此逻辑转换 CSV 文件中的所有条目:
之前:
value1,value2,"value3",value4
之后
"value1","value2","value3","value4"
有没有办法做这个操作?也许某种正则表达式?
【问题讨论】:
-
您是否尝试过使用保存的import specification 导入?
-
@HansUp 不,没有使用任何规范。我有 15 个表,为了创建规范 - 我需要手动导入每个 CVS。那是对的吗?我希望有一种方法可以将所有列定义为文本,而无需手动导入每个表..
-
视情况而定。导入规范不绑定到特定的 CSV 文件名或特定的 Access 表名。它基本上将字段名称和数据类型从源映射到目标。因此,如果所有 15 个 CSV 文件和所有 15 个表都使用相同的结构,那么您只需要一个导入规范。
-
每个表都有不同的列,具有不同的名称和值。无论如何,我已经添加了解决方案的答案;)
标签: vba ms-access type-conversion