DoCmd.TransferText,其中分隔符为分号,十进制为逗号

时间:2020-01-16 08:43:53

标签: excel vba ms-access

我正在尝试使用以下命令导入一个csv文件:

Dim appAccess As Access.Application
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase (databasePath)
appAccess.DoCmd.TransferText transferType:=acImportDelim, tableName:=dbTableName, Filename:=strPath, hasFieldNames:=True

我使用的是德国机器,其中标准定界符为;,标准小数点分隔符为,

如果使用这些分隔符,则会出现错误(数据未正确分隔)。

如果我将csv文件中的分隔符更改为,,将十进制分隔符更改为.,则会将数据加载到数据库中,但是会忽略.和数值因此无法正确导入。

我没有选择在Access中手动创建导入方案。有没有办法用VBA做到这一点?

我创建了一个Schema.ini文件,如下所示:

[tempfile.csv]
Format=Delimited(;)
ColNameHeader=True
DecimalSymbol=","

我将其保存在csv文件所在的文件夹中。

我仍然遇到运行时错误,说field1;field2;...不是目标表中的标题。因此,我猜该方法没有使用;作为分隔符。

1 个答案:

答案 0 :(得分:2)

如果您查看DoCmd.TransferText method的文档,则存在一个参数SpecificationName,其中说:

一个字符串表达式,它是您创建并保存在当前数据库中的导入或导出规范的名称。对于固定宽度的文本文件,必须指定参数或使用schema.ini文件,该文件必须与导入,链接或导出的文本文件存储在同一文件夹中。

要创建模式文件,可以使用文本导入/导出向导来创建文件。对于定界文本文件和Microsoft Word邮件合并数据文件,可以将此参数保留为空白以选择默认的导入/导出规范。

因此,如果无法使用向导生成该schema.ini文件,则可以在与要导入文件相同的文件夹中自己生成该文件。有关如何生成该文件的文档,请参见Schema.ini File (Text File Driver)

它看起来应该类似于以下内容:

[YourImportFileName.csv]
Format=Delimited(;)
DecimalSymbol=","

请注意,您必须为要导入的每个CSV文件生成一个ini文件,因为第一行始终是导入文件的名称。因此,生成schema.ini,导入,删除ini并重新开始为下一个文件生成下一个ini。

如果您想通过VBA即时生成该ini文件,请查看How to create and write to a txt file using VBA

相关问题