【问题标题】:Access VBA, importing csv file via TransferText with commata as decimal separator and semicolon as delimiter访问VBA,通过TransferText导入csv文件,逗号作为小数分隔符,分号作为分隔符
【发布时间】:2015-02-03 12:41:51
【问题描述】:

我在从 csv 文件导入双数时遇到了一些问题。这些文件有一个分号分隔符和逗号作为小数分隔符。

我无法设置导入规范,因为 csv 中字段的顺序经常发生变化,如果数据进入错误的字段将是一场灾难。

此外,csv 文件必须先写入临时表。不要因此而讨厌我,但由于我必须处理数据并为以后的数据处理设置一些信息字段,这是迄今为止实现它的最简单、最快和最安全的方法。

这就是问题本身:

当使用TransferText 时,它将导入,但当然将逗号解释为分隔符。不好...

当用句号替换逗号和用逗号替换分号时,它可以工作。但它会忽略句号,因此 1.2 变为 12,1.333 变为 1333。该字段将是 double 类型。

我已经测试了很多东西。除了TransferText我试过了:

DoCmd.RunSQL ("INSERT INTO Tabelle1 SELECT cdbl(a1) as aa FROM[TEXT;FMT=Delimited;HDR=YES;CharacterSet=437;DATABASE=C:\SPOT].[test.csv]")

但似乎没有任何效果,即使我在使用 TransferText 之前创建了一个字段类型为 DOUBLE 的新表......仍然会忽略小数。

所以,如果您能告诉我如何在第一步中使用TransferText 替换分号和逗号,或者如何使用INSERT INTO 的东西,我会很高兴。

非常感谢!

【问题讨论】:

    标签: vba csv import


    【解决方案1】:

    好的,我想我明白了!

    区域设置和我的 Access 使用逗号作为小数分隔符的问题。我也无法通过手动导入创建导入规范,因为它需要定义必须导入哪些字段。

    我现在做的是这样的:

    通过查询打开包含导入规范的表MSysIMEXSpecs: 从 MSysIMEXSpecs 中选择 *

    然后添加一个新行并设置SpecName = "Whatever"、DecimalPoint= "," 和 'FieldSeparator` = ";"以及必须进行的任何其他设置。

    既然有这个解决方法,难道没有办法更容易做到这一点吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多