Могу ли я импортировать несколько текстовых файлов в один лист Excel? - PullRequest
3 голосов
/ 08 февраля 2011

У меня есть одна папка с несколькими текстовыми файлами, в которую я добавляю один текстовый файл каждый день.Все текстовые файлы имеют одинаковый формат и разделены пробелами.

Можно ли создать код для Excel, который будет автоматически импортировать данные из нескольких текстовых файлов в один лист?

Я нашел некоторый код, который импортирует все текстовые файлы из папкино только если я изменил все это, чтобы разделить запятыми в первую очередь.Кроме того, я не мог заставить его обновить, если я добавил файлы в папку.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Хороший способ обработки файлов - это FileSystemObject.Чтобы сделать это доступным в VBA, необходимо добавить ссылку на него:

(выберите меню Инструменты \ Ссылки. В диалоговом окне Ссылки выберите «Среда выполнения сценариев Microsoft»)

Следующий кодпример будет читать все файлы в папке, читать их содержимое по одной строке за раз, разбивать каждую строку на |разделенные биты, и записывает эти биты в активный лист, начиная с ячейки 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

подпрограмма преднамеренно упрощена, чтобы оставаться ясной (я надеюсь), и потребуется работа, чтобы сделать ее устойчивой(например, добавить обработку ошибок)

1 голос
/ 08 февраля 2011

Похоже, было бы проще запустить скрипт для циклического перебора всех файлов в каталоге, создать новый файл, состоящий из содержимого всех файлов в виде новых строк, и сохранить его как 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()

Вы можете сохранить где-нибудь такой скрипт и запускать его каждый день, а затем открывать полученный CSV-файл в Excel. Это предполагает, что вы хотите получить данные из каждого файла в определенном каталоге, и что все необходимые вам файлы находятся в одном каталоге.

0 голосов
/ 09 февраля 2011

Вы можете использовать Schema.ini (http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx), драйвер Jet и запрос Union, если вам повезет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...