2011-02-08 5 views
3

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

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

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

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

+0

Объединить их первым и импортировать результат? –

ответ

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

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

4

Хорошим способом обработки файлов в целом является «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 

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

+0

для тех, кто хочет разграничить Tab, используйте vbTab вместо "|" – kunaguvarun

Смежные вопросы