【问题标题】:Format a csv file with a macro使用宏格式化 csv 文件
【发布时间】:2013-03-20 20:30:00
【问题描述】:

我有一个 .csv 文件,要从我们的会计软件中导出。最终目标是通过附加记录将“部分”数据导入 Access 2010 数据库表。我的问题是我需要某种设备从 .csv 文件中仅选择选择字段并格式化这些字段(定义数据类型),以便我能够将“新”格式化的 .csv 导入 Access,附加到现有的表,没有任何错误。

我们的会计软件确实允许导出其数据文件中的特定字段,但这是一个繁琐的过程,并且可能会给客户服务部门带来很多错误机会。我需要尽可能地让它成为一个“防白痴”!

【问题讨论】:

  • 能不能先转成excel,删除不需要的列,再把excel电子表格导出回csv?
  • 你有没有尝试过?如果是这样,请提供您的代码。如果没有,请尝试解决此问题,我们可以进一步帮助您解决您遇到的问题。如果没有某种示例数据来定义您的意思 choice fields,也很难提供帮助。
  • 我在 Excel 中尝试了从文本导入功能。我想做的是自动化我能够手动实现的目标,可能是通过使用某种宏。
  • @Sam 例如,csv 文件包含 40 个字段。我只对其中 9 个(选择)字段中的数据感兴趣。但必须将它们格式化为正确的数据类型,才能将它们导入并附加到 Access 中的现有表中。
  • 您在这方面有哪些语言/限制?您能否编写一个控制台应用程序或服务来解析这些 csv 存储在其中的目录,修改它们并将它们输出到输出目录中?您是否需要根据文件包含的内容更改导入的行?

标签: csv import excel-2010 ms-access-2010


【解决方案1】:

使用查询将 CSV 数据直接导入您的 Access 表。

通过查询可以轻松选择可用 CSV 字段的子集。查询可以包含转换 CSV 值的函数,以便与访问目标字段数据类型兼容。

INSERT INTO tblFromCSV ( FK_ID, CD, [TIMESTAMP], ts_as_datetime )
SELECT
    CLng(csv.FK_ID),
    UCase(csv.CD),
    csv.TIMESTAMP,
    CDate(csv.ts_as_datetime)
FROM [Text;HDR=yes;Database=C:\share\Access\].[sample.csv] AS csv;

SQL 第一行中列出的字段名称INSERT INTO tblFromCSV (<here>) 是将存储导入数据的 Access 表字段的名称。如果您要为所有表字段提供值,并以与表字段相同的顺序提供这些值,则可以省略该字段列表。我一般都会列出这些字段。

FROM 子句中,HDR=yes 表示我的 CSV 源文件的第一行包含字段名称。如果您的 CSV 文件没有,请使用 HDR=no,Access 会为 CSV 字段分配假名称,例如 fld1、fld2 等。

请注意,如果 CSV 确实包含字段名称,则它们不必与 Access 字段的名称匹配。

如果您在查询设计器中构建类似的查询,请注意它可能会像这样改变FROM 子句...

FROM (Text;HDR=yes;Database=C:\share\Access\) sample.csv AS csv;

因此,如果发生这种情况,请将其改回以避免语法错误。

我建议您从 SELECT 查询开始,以使 FROM 子句正常工作。然后根据需要添加转换 CSV 值所需的函数。一旦 SELECT 查询返回您需要的内容,请将其转换为 INSERT 查询。

我希望如果类似的查询适用于您的情况,您将不需要 Excel 作为中介来将 CSV 数据导入 Access。

【讨论】:

  • 这看起来很有希望。您能解释一下 FK_ID、CD 等...吗?这些是必要的,还是只是我要将数据附加到的 Access 表的字段名称?
  • 我想你做到了。我明天上班去试一试,然后回来汇报。谢谢汉斯
  • 我想我应该得到澄清。 From 语句到底在做什么?显然它指向 .csv 文件,但 HDR 代表什么?该文件是否必须位于共享文件夹中?我假设如果它与 Access Datafile 位于同一目录中,它会起作用吗?
  • 因此,如果我在 .csv 的原始导出中不包含标题名称(它们的名字很可怕),我可以将其更改为 HDR=No?
  • 别在意最后的评论。只需将名称括在括号中即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 2020-10-28
相关资源
最近更新 更多