微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自动将文件夹中的所有 excel 数据现有的和将要添加的导入 Microsoft Access

如何解决自动将文件夹中的所有 excel 数据现有的和将要添加的导入 Microsoft Access

我有一个包含一系列 excel 文件文件夹,所有这些文件都有一个名为“摘要”的工作表,其中包括一行和 4 列(所有 excel 文件中的列数和标题完全相同)。我想在 Access 中创建一个数据库,该数据库将所有现有文件的工作表“摘要”信息导入到单个表中(将每个 Excel 工作表的信息附加到一行中)。稍后,当我向该文件添加一个新的 excel 文件时,我希望它的数据自动添加到 Access 数据库中,而无需进一步的努力。甚至可以使用 Access 吗?

我可以使用 excel(从文件夹中获取数据)来做到这一点,但是当将新文件添加文件夹时更新数据库需要很长时间。

预先感谢您的回答!

解决方法

您可以使用一些VBA来循环保存文件的文件夹,检查文件是否已经导入,如果没有打开文件并从相关单元格中获取数据。在 Access 的表中,您需要有一个字段来存储文件名,以便将来的迭代知道该文件已被导入。一些帮助您入门的 VBA 代码:

Sub sGetExcelDataFromFolder()
    On Error GoTo E_Handle
    Dim objXL As New Excel.Application
    Dim objXLBook As Excel.Workbook
    Dim objXLSheet As Excel.Worksheet
    Dim db As DAO.Database
    Dim rsData As DAO.Recordset
    Dim strFolder As String
    Dim strFile As String
    strFolder = "C:\test\data\"
    Set db = CurrentDb
    Set rsData = db.OpenRecordset("SELECT * FROM tblExcelData WHERE 1=2;")
    strFile = Dir(strFolder)
    Do
        If Right(strFile,5) = ".xlsx" Then
            Debug.Print strFile
            If IsNull(DLookup("FileName","tblExcelData","FileName='" & strFile & "'")) Then   '   file has not already been imported
                Set objXLBook = objXL.Workbooks.Open(strFolder & strFile)
                Set objXLSheet = objXLBook.Worksheets("Summary")
                With rsData
                    .AddNew
                    !FileName = strFile
                    !F1 = objXLSheet.Cells(1,1)
                    !F2 = objXLSheet.Cells(1,2)
                    !F3 = objXLSheet.Cells(1,3)
                    !F4 = objXLSheet.Cells(1,4)
                    .Update
                End With
                Set objXLSheet = Nothing
                objXLBook.Close SaveChanges:=False
                Set objXLBook = Nothing
            End If
        End If
        strFile = Dir
    Loop Until strFile = ""
sExit:
    On Error Resume Next
    Set objXLSheet = Nothing
    objXLBook.Close
    Set objXLBook = Nothing
    objXL.Quit
    Set objXL = Nothing
    rsData.Close
    Set rsData = Nothing
    Set db = Nothing
    Exit Sub
E_Handle:
    MsgBox "sGetExcelDataFromFolder",vbOKOnly + vbCritical,"Error: " & Err.Number
    Resume sExit
End Sub

您可以在单击命令按钮时运行此代码(以便用户可以确定何时重新运行代码),或者您可以使用数据库中的启动表单在打开数据库时运行此代码.

随着更多文件添加到此文件夹,您可能需要考虑使用 VBA 将处理后的文件移动到另一个文件夹,这样代码就不必检查数百个文件来查找要导入的新文件。

>

问候,

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。