Can I import multiple text files into one excel sheet?

后端 未结 3 471
心在旅途
心在旅途 2021-01-01 06:10

I have one folder with multiple text files that I add one text file to every day. All text files are in the same format and are pipe delimited.

Is it possible to c

相关标签:
3条回答
  • 2021-01-01 06:14

    You can use Schema.ini ( http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx ), Jet driver and Union query, with any luck.

    0 讨论(0)
  • 2021-01-01 06:25

    A good way to handle files in general is the 'FileSystemObject'. To make this available in VBA you need to add a reference to it:

    (select the Tools\References menu. In the References dialog, select 'Microsoft Scripting Runtime')

    The following code example will read all files in a folder, reads their content one line at a time, split each line into | separated bits, and writes theses bits to the active sheet starting at cell A1, one row per line.

    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
    

    the sub is deliberately simplified to remain clear (i hope) and will need work to be made robust (eg add error handling)

    0 讨论(0)
  • 2021-01-01 06:33

    Sounds like it'd be easiser to run a script to cycle thru all the files in the directory, create a new file composed of all the files' contents as new lines, and save that as a csv. something like:

    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()
    

    You could save a script like that somewhere and run it each day, then open the resulting csv in excel. This assumes that you want to get the data from each file in a particular directory, and that all the files you need are in one directory.

    0 讨论(0)
提交回复
热议问题