【问题标题】:Automated Import of csv files from Windows Explorer into Access DB将 csv 文件从 Windows 资源管理器自动导入 Access DB
【发布时间】:2016-07-20 18:54:57
【问题描述】:

我有一个 ADB,我希望通过 Windows 资源管理器自动循环,将文件导入每周报告表 (Wkly_Rprt),执行格式化,并将其附加到每周汇总表 (Wkly_S_Rprt),然后删除每个文件从 Windows 资源管理器?文件名的格式相同,最后更改了日期。如果是这样,那会是什么样子,因为我已经查看了许多其他示例,但运气不佳。

非常感谢您的帮助!

【问题讨论】:

  • 也许这个话题对你有帮助:stackoverflow.com/questions/20245053/…
  • 忘记遍历文件夹,只需遍历TblImportMenu。该表是如何填充的?您需要导入表中的哪些文件?现在只需要第一个。
  • 对于文件,只要将文件添加到 Windows Explorer 文件夹,该文件就会被导入。无论是同时处理 2 个文件还是 50 个文件。我将看看 TblImportMenu 是如何工作的。我应该在哪里添加这个,在 DoCmd 之前还是之后?
  • 谢谢 Rene,我会查看该链接,看看它是否适合!
  • 感谢 Parfait,我确实在某个区域看到了该命令,但不确定实际放置它的位置。

标签: ms-access vba


【解决方案1】:

使用Scripting.FileSystemObject 遍历文件系统文件夹和文件。这是我用于从特定文件夹导入文件的代码示例:

Private sub ImportCSVs(TempImportFolder as String)

    On Error Goto ImportCSVs_Err
    Dim objFS As Object, objFolder As Object, objFiles As Object

    Set objFS = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFS.GetFolder((TempImportFolder)) 
    Set objFiles = objFolder.Files
    For Each file In objFiles
        DoCmd.TransferText acImportDelim, "[import_spec]", "Wkly_Rprt",  TempImportFolder & "\" & file.Name, False 
        'Remove old data ....   
        'Append new data ....
        'Delete file:
        objFs.DeleteFile TempImportFolder & "\" & file.Name
NextFile:
    Next
ImportCSVs_Exit:
    Exit Sub
ImportCSVs_Err:
    'Handle Errors occurred do to file structure, and Resume NextFile

End Sub

您可以扫描文件夹中的子文件夹,并在每个子文件夹上运行此代码,sample code at this reference

【讨论】:

  • 哇,马兰,这看起来很棒!从这个角度来看,我会替换我的几乎所有内容,而不是那些被注释掉的 Remove 和 Append 部分。我的假设是否正确?
  • 是的,我就是这样做的。如果一个文件的格式不正确,即:不是csv,或者是csv如果是不同的格式,就会出错。只需从下一个文件继续... 请注意: 删除旧数据应该与您正在导入的数据相关,确保您没有删除刚刚导入的数据上一次迭代... ;)
  • 嗨,marlan,我查看了这段代码以及它在我的情况下是如何工作的。运行它,但它不喜欢将 On Current Event Procedure 作为按钮 - 过程声明与事件描述不匹配。我相信这是由于 OnOpen 因为事件发生时预计会运行事件名称。有什么建议?这可能是一个愚蠢的问题,这会提示打开一个文件夹还是我将文件夹的源放在此处,例如“TempImportFolder”?非常感谢,
  • 至于事件:你根据你的系统规划选择了事件来运行代码。就我而言,当用户需要导入新数据时,我将它放在 Button OnClick 事件中。 至于文件夹:该程序接收一个文件夹作为参数,调用程序调用时必须提供一个。调用程序可以从表单字段、对话框(link to API function I use)、数据库字段、硬代码等接收文件夹名称...我将对话框保存到文本框,链接到数据库字段...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多