使用宏格式化csv文件

时间:2013-03-20 20:30:01

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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会将伪名称(例如fld1,fld2等)分配给CSV字段。

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

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

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

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

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

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