将大量 .csv 文件导入 Access

将大量 .csv 文件导入 Access

所有 CSV 文件都采用相同的格式。我希望每个 CSV 文件都位于自己的表中,表名与文件名相同。

我怎样才能做到这一点?

答案1

我浪费了四个小时的时间来解决一个具体问题,同时回答了你的问题,现在我要回馈社区。所有其他代码均来自其他资源。此代码将使用 transfertext 函数将目录中的多个 csv 文件拉入它们自己的单独表中,并以 FILENAME 作为表名。运行具有相同文件名的文件将允许您附加到现有表中(当您有 30 个不同名称的文件,但每个月都保留相同的名称时,这很方便)。Access 2010

我遇到的问题:运行同名文件时,该死的表格无法附加。它总是会创建一个新表并附加 1 2 3 等。whatever_csv whatever_csv1 whatever_csv2。***您必须从文件名中删除句点。即使 Access 在创建表时自动将其更改为下划线,它也会发现文件名和表的名称不同。这适用于 Access 不允许的任何字符。

使用 strTable = Left(strFile, Len(strFile) - 4) 截断文件名的最后四位以删除 .csv

*****这是你问题的答案*****

Option Compare Database 
Option Explicit 

Function DoImport() 

 Dim strPathFile As String 
 Dim strFile As String 
 Dim strPath As String 
 Dim strTable As String 
 Dim blnHasFieldNames As Boolean 

 ' Change this next line to True if the first row in CSV worksheet 
 ' has field names 
 blnHasFieldNames = True 

 ' Replace C:\Documents\ with the real path to the folder that 
 ' contains the CSV files 
 strPath = "C:\Documents\" 

 ' Replace tablename with the real name of the table into which 
 ' the data are to be imported 

 strFile = Dir(strPath & "*.csv") 


 Do While Len(strFile) > 0 
       strTable = Left(strFile, Len(strFile) - 4) 
       strPathFile = strPath & strFile 
       DoCmd.TransferText acImportDelim, , strTable, strPathFile, blnHasFieldNames 


 ' Uncomment out the next code step if you want to delete the 
 ' EXCEL file after it's been imported 
 '       Kill strPathFile 

       strFile = Dir() 

 Loop 


End Function 

答案2

如果您的 csv 文件具有相同的格式,通常最好将它们保存在单个表中。例如,您可以有 2 个表,一个包含文件的名称,另一个包含文件的内容。

对于导入多个 csv 的内容,我通常更喜欢 VBA。有 3 个主要选项:

  • DoCmdTransferText
  • 文件系统对象
  • I/O打开语句

由于所有 csv 文件都具有相同的格式,因此最简单的路径是第一个。

对于使用DoCmd 传输文本您需要指定一个架构。您可以手动导入一个文件来创建该架构,当出现保存架构的选项时,您只需保存它即可。然后,使用目录()使用扩展名“*.csv”函数循环遍历目录并导入所有文件。

高血压

相关内容