我可以将多个文本文件导入一个Excel工作表吗?

时间:2011-02-08 19:54:08

标签: excel excel-vba vba

我有一个包含多个文本文件的文件夹,我每天都会添加一个文本文件。所有文本文件格式相同,并以管道分隔。

是否可以为excel创建代码,自动将多个文本文件中的数据导入一个工作表?

我发现了一些代码可以导入文件夹中的所有文本文件,但前提是我首先将其全部更改为逗号分隔符。另外,如果我将文件添加到文件夹,我无法更新它。

非常感谢任何帮助!

3 个答案:

答案 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查询。运气好。