使用 vba/macros 将多个 CSV 文件中的特定列导入 Access 2013

Posted

技术标签:

【中文标题】使用 vba/macros 将多个 CSV 文件中的特定列导入 Access 2013【英文标题】:Import of specific Columns from multiple CSV files into Access 2013 using vba/macros 【发布时间】:2017-03-02 10:12:22 【问题描述】:

我有多个列数相同(大约 616 列)和不同行数的 csv 文件(分号分隔)。我想将每个文件导入 Access 中的不同表中。我对宏/vba 完全陌生。 我遇到了两个问题:

    我使用了来自论坛的此代码 [https://superuser.com/questions/1131994/ms-access-2016-import-multiple-csv-files][1],它工作正常,但它正在将一个 csv 文件导入一个表格中的一列中,分号分隔(意味着 csv 文件中的 616 列显示在一列中,以分号分隔访问) )。尽管数据应显示在表格的单独列中。我希望数据显示在单独的列中。导入后,我看到访问中的数据与 csv 文件相同。 csv 文件中的列标题也包含文本和数字(1 到 600)。 其次,我想从 csv 文件中导入一些特定的列。有人可以编辑此代码并添加一些编码如何将特定列从 csv 文件导入 Access。

希望我解释清楚。

【问题讨论】:

您必须规范您的数据布局 - 您最多只能访问 255 个字段。这么多列表明存储方法不佳。在此处阅读 techrepublic.com/article/… 以获取有关将数据导入 Access 的一些指导 感谢您寄给我这篇文章。我是 Access 的新手。我真的不知道它有一个最大值。限制为 255 个字段。现在我理解得更好了。 【参考方案1】:

您无法将包含 600 多列的文件导入 Access。你可以试试 SQL Server。或者,您可以导入所需的特定字段。我严重怀疑您的数据集中需要 600 多个字段。

无论如何,您可以将特定字段从 Excel 导出到 Access。

Sub DAOFromExcelToAccess()
' exports data from the active worksheet to a table in an Access database
' this procedure must be edited before use
Dim db As Database, rs As Recordset, r As Long
    Set db = OpenDatabase("C:\FolderName\DataBaseName.mdb") 
    ' open the database
    Set rs = db.OpenRecordset("TableName", dbOpenTable) 
    ' get all records in a table
    r = 3 ' the start row in the worksheet
    Do While Len(Range("A" & r).Formula) > 0 
    ' repeat until first empty cell in column A
        With rs
            .AddNew ' create a new record
            ' add values to each field in the record
            .Fields("FieldName1") = Range("A" & r).Value
            .Fields("FieldName2") = Range("B" & r).Value
            .Fields("FieldNameN") = Range("C" & r).Value
            ' add more fields if necessary...
            .Update ' stores the new record
        End With
        r = r + 1 ' next row
    Loop
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

【讨论】:

抱歉 4 晚回复。其实很难解释。 Siemens HMI 上显示的自动图形将所有数据保存在 csv 文件中,它有 600 多列。大传感器在 6 到 7 秒内从左到右和从右到左连续移动(读取铝箔上的涂层厚度)。因此,一旦它从左向右移动,它就会保存这 600 列,反之亦然。所以可以肯定的是,在 HMI 上绘制的自动图形正在使用这 600 个值(铝箔上的厚度值从左到右以及其他方式..)。只是给你的想法。不幸的是,我也是新手

以上是关于使用 vba/macros 将多个 CSV 文件中的特定列导入 Access 2013的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gsutil 将多个 csv 文件连接成一个具有单个标题的 csv 文件

如何使用 Pandas 将多个 csv 文件中的单个数据列合并为一个?

Pandas:使用循环和分层索引将多个 csv 文件导入数据帧

使用 Python 将文件从多个目录复制到一个目录

如何在 Python 中使用 Pandas 数据结构附加多个 CSV 文件

使用 R 将多个数据帧写入 .csv 文件