所有 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”函数循环遍历目录并导入所有文件。
高血压