Версия для печати

Как объединить несколько текстовых файлов в один?

Что умеет Excel

 

В общем-то проблема не такая распространенная, как сбор данных из нескольких файлов/листов в Excel, но все же. Решил вот написать, как просто и быстро можно из множества текстовых файлов собрать информацию в один новый текстовый файл. Притом это не потребует от Вас никаких усилий, кроме как нажатия кнопочки и выбора нужных файлов. Ну и скачивания файла с этой странички. Или ручной вставки кода в свою книгу. Собственно, сам код:

Sub Get_All_TXT_Text()
    Dim avFiles, li As Long
    avFiles = Application.GetOpenFilename("TXT Files(*.txt),*.txt", , , , True)
    If VarType(avFiles) = vbBoolean Then Exit Sub
    Dim objFSO As Object, objTxtFile As Object, sTxt, sAllTxt
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    For li = LBound(avFiles) To UBound(avFiles)
        Set objTxtFile = objFSO.OpenTextFile(avFiles(li), 1)
        sTxt = objTxtFile.ReadAll
        sAllTxt = sAllTxt & vbNewLine & sTxt
        objTxtFile.Close
    Next li
    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)
    objTxtFile.WriteLine sAllTxt
    objTxtFile.Close
    Set objTxtFile = Nothing: Set objFSO = Nothing
End Sub
Sub Get_All_TXT_Text()
    Dim avFiles, li As Long
    avFiles = Application.GetOpenFilename("TXT Files(*.txt),*.txt", , , , True)
    If VarType(avFiles) = vbBoolean Then Exit Sub
    Dim objFSO As Object, objTxtFile As Object, sTxt, sAllTxt
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    For li = LBound(avFiles) To UBound(avFiles)
        Set objTxtFile = objFSO.OpenTextFile(avFiles(li), 1)
        sTxt = objTxtFile.ReadAll
        sAllTxt = sAllTxt & vbNewLine & sTxt
        objTxtFile.Close
    Next li
    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)
    objTxtFile.WriteLine sAllTxt
    objTxtFile.Close
    Set objTxtFile = Nothing: Set objFSO = Nothing
End Sub

Вот и все. Теперь этот код необходимо вставить в стандартный модуль и…Пользоваться!
После работы кода на диске «С» будет создан файл «AllText.txt», в котором и будут содержаться данные всех выбранных файлов.

Скачать пример »

  Tips_Macro_Get_All_TXT_Text.xls (37,5 KiB, 1 107 скачиваний)

Так же см.:
Сбор данных с нескольких листов/книг
Как собрать данные с нескольких листов или книг?



Поддержать автора сайта
Поделиться ссылкой
  1. Анна
    3 Октябрь 2011 в 17:05 | #1

    Вот на этой строке все валится:
    sTxt = objTxtFile.ReadAll (отмечена была в дебаггере)
    Ошибка такая: Runtime error 62 Input past end of file

    P.s. У меня файлы на китайском, и их имена тоже.

  2. 3 Октябрь 2011 в 18:21 | #2

    Скорее всего проблема именно в языке. Программа неверно определяет конец файла. Вышлите мне пару своих файлов для экспериментов и поиска решения.

  3. dana
    18 Ноябрь 2011 в 11:52 | #3

    Здравствуйте.
    Скачала пример. Нажимаю на кнопочку «Объединить текстовые файлы» открывается окошко с просьбой указать нужные файлы, но когда я указываю на нужные мне документы, ничего не происходит. Окошко просто закрывается, а на экране пустой лист Как быть?

  4. 18 Ноябрь 2011 в 22:08 | #4

    Зайти на диск «С» и найти там текстовый файл «AllText.txt». Это и есть файл, в котором собрана вся информация с выбранных файлов.

  5. Dima
    28 Ноябрь 2011 в 17:58 | #5

    Добрый день! У меня файлы формата log. Видимо из за этого возникает ошибка на строке (в третьей строке расширение заменил на log):

    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)
    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)

    В чем может быть проблема?

  6. 28 Ноябрь 2011 в 22:01 | #6

    Dima :

    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)
    Set objTxtFile = objFSO.CreateTextFile("C:/AllText.txt", True)

    В чем может быть проблема?

    Проблема очевидна. От того, что Вы меняете расширение в строке кода не меняется сама команда — она создает ТОЛЬКО ТЕКСТОВЫЕ ФАЙЛЫ. Чтобы код работал с log файлами меняйте расширение у них.

  7. Dima
    29 Ноябрь 2011 в 12:28 | #7

    Спасибо большое. Нашел как массово переименовывать файлы. Через Total Commander выделением нужных файлов и CTRL-M

  8. Иван Субота
    2 Декабрь 2011 в 02:42 | #8

    Я хотел открыть не только файлы .txt, но и .docx. А потом все записать в .docx. Я изменил:

    avFiles = Application.GetOpenFilename("TXT Files(*.txt; *.docx),*.txt; *.docx", , , , True)
    avFiles = Application.GetOpenFilename("TXT Files(*.txt; *.docx),*.txt; *.docx", , , , True)

    но ничего не получилось.

  9. 2 Декабрь 2011 в 09:01 | #9

    И не получится. docx не является разновидностью текстового файла, поэтому к нему не применимы методы, используемые в данном коде. log — является разновидностью текстовых файлов и открывается в текстовом редакторе. Именно поэтому с этим типом файлов данный метод сработал.

  10. Иван Субота
    2 Декабрь 2011 в 12:06 | #10

    А что можно делать с docx?

  11. Иван Субота
    2 Декабрь 2011 в 22:31 | #11

    @Дмитрий(Админ)
    А что можно сделать с docx? Мне нужно объединить файлы docx в один docx.

  12. 2 Декабрь 2011 в 22:44 | #12

    Иван, статья про текстовые файлы. Документы Word к ним совершенно не относятся и код будет совершенно иным.
    Так что не надо закидывать тему своими однотипными комментариями с указанием своих пожеланий. Для подобных вопросов есть форум — задайте свой вопрос там.

  13. Азам
    29 Декабрь 2011 в 14:47 | #13

    Здравствуйте Дмитрий!
    Макрос отлично работает. Но хотелось бы чтоб все файлы объеденились со второй строки т.е. без шапки.

  14. 29 Декабрь 2011 в 17:15 | #14

    Для этого проще открывать текстовые файлы через Excel, а собирать с помощью кода из этой статьи: Как собрать данные с нескольких листов или книг?

  15. Игорь
    31 Январь 2012 в 10:18 | #15

    Текстовые можно проще собрать — пишем bat или cmd файл с примерно таким текстом (возможны варианты):

    @echo off
    copy /b *.txt C:\temp\all.txt

    Все txt из папки с этим командным файлом будут слиты в один файл. Если этот bat/cmd выполнить конечно…

  16. Алексей
    9 Февраль 2012 в 11:55 | #16

    Доброго времени суток!
    Скачал файл, поменял расширение в фильтре и в расширении файла all на csv. Все работает, но только до того момента, пока li не становится равной 76. потом по строке sTXT = objTxtFile.ReadAll выходит ошибка 62. Файлов всего подцеплялось 193. Что может быть? Меньшее количество файлов обрабатывает нормально без вопросов

  1. Пока что нет уведомлений.

Комментарий будет добавлен после проверки администратором.
Комментарии, не имеющие отношения к комментируемой статье, будут удаляться без уведомления и объяснения причин. Если есть вопрос по проблеме в Excel- добро пожаловаться на Форум