我有一个包含多个文本文件的文件夹,我每天都会添加一个文本文件。所有文本文件格式相同,并以管道分隔。
是否可以为excel创建代码,自动将多个文本文件中的数据导入一个工作表?
我发现了一些代码可以导入文件夹中的所有文本文件,但前提是我首先将其全部更改为逗号分隔符。另外,如果我将文件添加到文件夹,我无法更新它。
非常感谢任何帮助!
答案 0 :(得分:4)
一般来说,处理文件的好方法是'FileSystemObject'。要在VBA中使其可用,您需要添加对它的引用:
(选择Tools \ References菜单。在References对话框中,选择'Microsoft Scripting Runtime')
以下代码示例将读取文件夹中的所有文件,一次读取一行内容,将每行拆分为|分隔位,并将这些位写入从单元格A1开始的活动工作表,每行一行。
Sub ReadFilesIntoActiveSheet()
Dim fso As FileSystemObject
Dim folder As folder
Dim file As file
Dim FileText As TextStream
Dim TextLine As String
Dim Items() As String
Dim i As Long
Dim cl As Range
' Get a FileSystem object
Set fso = New FileSystemObject
' get the directory you want
Set folder = fso.GetFolder("D:\YourDirectory\")
' set the starting point to write the data to
Set cl = ActiveSheet.Cells(1, 1)
' Loop thru all files in the folder
For Each file In folder.Files
' Open the file
Set FileText = file.OpenAsTextStream(ForReading)
' Read the file one line at a time
Do While Not FileText.AtEndOfStream
TextLine = FileText.ReadLine
' Parse the line into | delimited pieces
Items = Split(TextLine, "|")
' Put data on one row in active sheet
For i = 0 To UBound(Items)
cl.Offset(0, i).Value = Items(i)
Next
' Move to next row
Set cl = cl.Offset(1, 0)
Loop
' Clean up
FileText.Close
Next file
Set FileText = Nothing
Set file = Nothing
Set folder = Nothing
Set fso = Nothing
End Sub
故意简化sub以保持清晰(我希望)并且需要工作才能变得健壮(例如添加错误处理)
答案 1 :(得分:1)
听起来更容易运行脚本来循环通过目录中的所有文件,创建一个由所有文件的内容组成的新文件作为新行,并将其保存为csv。类似的东西:
import os
basedir='c://your_root_dir'
dest_csv="<path to wherever you want to save final csv>.csv"
dest_list=[]
for root, subs, files in os.walk(basedir):
for f in files:
thisfile=open(basedir+f)
contents=thisfile.readlines()
dest_list.append(contents)
#all that would create a list containing the contents of all the files in the directory
#now we'll write it as a csv
f_csv=open(dest_csv,'w')
for i in range(len(dest_list)):
f_csv.write(dest_list[i])
f_csv.close()
你可以在某个地方保存这样的脚本并每天运行它,然后在excel中打开生成的csv。这假设您希望从特定目录中的每个文件获取数据,并且您需要的所有文件都在一个目录中。
答案 2 :(得分:0)
您可以使用Schema.ini(http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx),Jet驱动程序和Union查询。运气好。