使用 MS Access 导入多个文本文件
Using MS Access to import multiple text files
我有大约 600 个带有 headers 的文本文件,我真的不想将它们一个一个地手动导入到 MS Access 中。
我不想将文本文件附加到一个 Access table。如果我有 600 个文本文件,我希望结果为 600 Access tables。
我为此四处搜索,最接近的是一些代码,可以获取我的文本文件并将它们附加到一个访问中 table。我不想要那个。
我的印象是您需要将流程分为三个步骤
第一个将文本导入 table 的代码
http://www.datawright.com.au/access_resources/access_import_text_files.htm
每个文本都被导入到临时 tables...
然后检查 table 字段
创建 tables 的第二个代码
http://www.access-programmers.co.uk/forums/showthread.php?t=213261
第三次擦除 temp table 的内容并继续下一个文本...或者当您导入它们时,您可以在 temp table 中添加信息...例如文本名称并处理它们之后分批
考虑一个 For/Loop VBA 使用 DoCmd.TransferText 命令遍历文件夹目录中的所有文本文件并导入它们的后缀表示 1-600。
Dim FSO as Object, objFolder As Object, objFile as Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSO.GetFolder("C:\Path\To\TextFiles")
i = 1
For each objFile in objFolder.Files
If Right(objFile.Name, 3) = "txt" Then
DoCmd.TransferText acImportDelim, , "File_" & i, objFolder & "\" & objFile.Name, True
End if
i = i + 1
Next objFile
Set objFile = Nothing
Set objFolder = Nothing
Set FSO = Nothing
在 TransferText 的空参数中,您可以使用在文本文件的一次手动导入过程中创建的预定义规范对象。这允许您为导入的文本文件命名字段、定义数据类型等。
最后,如果所有文件的结构都相同,请考虑再次导入一个 table 并根据相关字段使用查询在 600 个分组中拆分(如果需要)。要使用 table,只需将上面的 "File_" & i
参数替换为 table 字符串名称:"dataFiles"
。您可以节省 table 个命名空间,减少数据库对象的存储,总体上有助于更好的组织和关系模型。
我就是这样做的。
Option Compare Database
Private Sub Command0_Click()
Dim strPathFile As String, strFile As String, strPath As String
Dim strTable As String
Dim blnHasFieldNames As Boolean
blnHasFieldNames = True
strPath = "C:\Users\ryans\OneDrive\Desktop\test\"
strTable = "Table1"
strFile = Dir(strPath & "*.txt")
Do While Len(strFile) > 0
strPathFile = strPath & strFile
DoCmd.TransferText acImportDelim, _
TableName:="Test1", _
FileName:=strPath & strFile, _
HasFieldNames:=True
strFile = Dir()
Loop
End Sub
我有大约 600 个带有 headers 的文本文件,我真的不想将它们一个一个地手动导入到 MS Access 中。
我不想将文本文件附加到一个 Access table。如果我有 600 个文本文件,我希望结果为 600 Access tables。
我为此四处搜索,最接近的是一些代码,可以获取我的文本文件并将它们附加到一个访问中 table。我不想要那个。
我的印象是您需要将流程分为三个步骤
第一个将文本导入 table 的代码 http://www.datawright.com.au/access_resources/access_import_text_files.htm
每个文本都被导入到临时 tables... 然后检查 table 字段
创建 tables 的第二个代码 http://www.access-programmers.co.uk/forums/showthread.php?t=213261
第三次擦除 temp table 的内容并继续下一个文本...或者当您导入它们时,您可以在 temp table 中添加信息...例如文本名称并处理它们之后分批
考虑一个 For/Loop VBA 使用 DoCmd.TransferText 命令遍历文件夹目录中的所有文本文件并导入它们的后缀表示 1-600。
Dim FSO as Object, objFolder As Object, objFile as Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSO.GetFolder("C:\Path\To\TextFiles")
i = 1
For each objFile in objFolder.Files
If Right(objFile.Name, 3) = "txt" Then
DoCmd.TransferText acImportDelim, , "File_" & i, objFolder & "\" & objFile.Name, True
End if
i = i + 1
Next objFile
Set objFile = Nothing
Set objFolder = Nothing
Set FSO = Nothing
在 TransferText 的空参数中,您可以使用在文本文件的一次手动导入过程中创建的预定义规范对象。这允许您为导入的文本文件命名字段、定义数据类型等。
最后,如果所有文件的结构都相同,请考虑再次导入一个 table 并根据相关字段使用查询在 600 个分组中拆分(如果需要)。要使用 table,只需将上面的 "File_" & i
参数替换为 table 字符串名称:"dataFiles"
。您可以节省 table 个命名空间,减少数据库对象的存储,总体上有助于更好的组织和关系模型。
我就是这样做的。
Option Compare Database
Private Sub Command0_Click()
Dim strPathFile As String, strFile As String, strPath As String
Dim strTable As String
Dim blnHasFieldNames As Boolean
blnHasFieldNames = True
strPath = "C:\Users\ryans\OneDrive\Desktop\test\"
strTable = "Table1"
strFile = Dir(strPath & "*.txt")
Do While Len(strFile) > 0
strPathFile = strPath & strFile
DoCmd.TransferText acImportDelim, _
TableName:="Test1", _
FileName:=strPath & strFile, _
HasFieldNames:=True
strFile = Dir()
Loop
End Sub