Vba работа с файлами txt

Vba работа с файлами txt

Приветствую! Сегодня мы поговорим о файлах, а точнее, как получать информацию из текстовых файлов в VBA. И будем повышать ваше умение программировать, как обычно, на примере.

В обычном текстовом файле содержатся строки:

Приветствуем Вас на сайте CodeTown.ru
здесь Вы найдёте много интересных
примеров на разные темы
и на разных языках.
Наслаждайтесь=)

Необходимо вывести их на лист в Excel, чтобы каждое слово находилось в своей ячейки с учётом пробелов.

Open «file.txt» For Input As #1 — таким образом прописываем путь к файлу, который мы хотим прочитать. Помните, что наши пути могут различаться. Также в конце команды мы присваиваем файлу идентификационный номер. В нашем случае 1.

Do Until EOF(1) — инициализация цикла чтения файла, пока не кончится файл (End Of File). В скобках функции указываем идентификационный номер файла, с которым мы работаем.

Line Input #1, Data — построчное считывание информации из файла. То есть, за каждую итерацию цикла Do Until EOF(1)F(1) мы обрабатываем одну строку.
Функция Line Input является наследуемой функцией от функции Input, которая в свою очередь позволяет считывать данные разного формата из открытых файлов разного типа. Подробный синтаксис вы можете найти здесь.

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

Do While InStr(Data, " " ) <> 0 — инициализирует цикл разделения строки на слова по пробелам. Собственно, сама функция InStr(Data, " ") занимается поиском символа, указанного на второй позиции (в нашем случае пробел) в строке, указанной на первой позиции (Data). Поиск осуществляется слева направо. Результатом функции является позиция найденного символа. Подробнее читайте тут. Таким образом, цикл не закончится, пока не закончатся пробелы. Однако, следует помнить, что пробел редко стоит в конце строки(обычно из-за ошибки автора). По этому после выхода из цикла в переменной Data останется последнее слово строки. Не забудем его вывести.

Напоследок, обратите внимание на расположение обнуляющих операций переменный c и r. Нам приходится обнулять переменную r перед началом обработки строки, чтобы реализовать перенос между строк.

Если Вам какие-то команды остались не ясны, советую почитать предыдущие статьи, там вы найдёте примеры на работу с ними.

Наш вывод:

Вот, собственно, и всё, разобрали некоторые моменты работы с файлами в VBA. Задавайте вопросы в комментариях. Надеюсь вы прониклись магией VBA, если же нет, читайте продолжение. =)

Данные функции предназначены для работы с текстовыми файлами из VBA Excel.

Используя эти функции, вы при помощи одной строки кода сможете записать текст из переменной в файл, или наоборот, загрузить содержимое текстового файла в переменную.

Чтение текстового файла в переменную:

  • 79709 просмотров

Комментарии

Могу написать макрос под заказ (платно)

Как можно задать строки для чтения/записи из txt?
Пример:
Есть файл txt
Прораб
Вася
Петя

Работники
Саша
Андрей
Коля

Необходимо занести имена прорабов в один массив arr1(), а имена работников в другой arr2(). Изменить имена рабочих и их количество и вернуть в txt новые значения. Т.е. массивы динамические, а идентифицируем начало и конец соответствующего массива в txt по шапке в начале и пустой строке в конце.

В UTF-8 сохранять так
Function SaveTXTfile(ByVal filename As String, ByVal txt As String) As Boolean
On Error Resume Next: Err.Clear
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 ‘text
stream.Charset = "utf-8"
stream.Open
stream.writetext Replace(txt, Chr(10), vbNewLine)
stream.savetofile filename, 2
End Function

Добрый день!
Помогите еще в одной вещи.
По дефолту пишет в ANSI, а нужно UTF-8

Neri, замените в коде

Добрый день!
У меня есть ячейка, в которой спомощью функции сцепить собраные несколько значений и исползуется символ переноса строки
Выглядит это примерно вот так:
=СЦЕПИТЬ(R3 & СИМВОЛ(10) & S3 & СИМВОЛ(10))
"Строка 1"
"Строка 2"
Как можно записать в файл, но чтобы каждая строка писалась с новой строки?

Добрый день. А кто подскажет, какие применять команды для поиска части текста в файле (.xml), потом копировать его и этим текстом переименовывать папку или файл этот же? Спасибо.

Используйте функцию ChangeFileCharset из этой статьи:
http://excelvba.ru/code/Encode

получится что-то типа такого:

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

ActiveWorkbook.SaveAs Filename:=path, FileFormat:=xlTextWindows, _
CreateBackup:=False
Dim y As String
Open path For Input As #1
Line Input #1, y
Close #1
Open path For Output As #2
y = Replace(y, """", "")
y = StrConv(y, vbUnicode)
y = Replace(y, Chr(34), "")
Print #2, y
Close #2

точно в несколько раз больше?
fnum = FreeFile()
Open "C:11.txt" For Input As #fnum
Temp = Split(Input(LOF(fnum), #fnum), vbNewLine)
Close #fnum

Читайте также:  Zona for windows 10

Никто не спорит, — улучшать (дорабатывать) функцию можно бесконечно.
Чтобы нужные строки из файла брались, — кода будет в несколько раз больше.

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

А вопрос то актуальный. Дополнив функцию этой возможностью, её функционал стал бы гораздо качественне.

Можно с помощью Вашей функции взять только определенные строки, например со 2 по 20

Уберите строку Option Explicit — тогда не будет выскакивать ошибка Variable not defined

Пишет Variable not defined, указывая на binaryStream. Странно, ведь там все так же. 🙁

Mix, используйте эту функцию с третьим параметром "utf-8noBOM"

Добрый вечер!
Делаю по второму примеру, файл сохраняется в кодировке ANSI. Подскажите, как изменить данный пример чтобы сохранялось в кодировке utf-8 без BOM?

Это мое первое общение с VBA 🙂

Можно, конечно, и номер строки задать, откуда будут вставляться данные, — но код будет намного сложнее.
Алгоритм:
1) считываем весь текст из файла
2) разбиваем его на 2 части (по заданному номеру строки
3) формируем новый текст: 1-я часть + вставляемый текст + 2-я часть
4) записываем результат в тот же файл

Насчёт XML: очень не рекомендую использовать такой метод для XML, очень вероятны ошибки.
Там проще использовать объектную модель XML, программно добавляя новые узлы.

Очень интересна функция Добавление в текстовый файл из переменной, но так как я только начала изучать VBA, непонятно можно ли указать номер строки (в середине текста) начиная с которой начать добавление строк. И можно ли использовать эту функцию для добавления xml файл?

Здравствуйте! Подскажите пожалуйста, какой код надо написать, чтобы работал такой макрос: по нажатию кнопки выбирать папку, в которой есть текстовые файлы. В книгу вставляются листы с названиями от имени файлов в этой папке и в эти листы вводятся данные из этих файлов. Файлы содержат разную информацию: матрица, фамилии и дата рождения и т.д. Спасибо.

Anddre — если заменить "ReadTXTfile" на "txt",
то тогда функция будет всегда возвращать пустое значение. Любая Ф-я почти всегда должна содержать оператор присвоения значения переменной с именем самой функции.

Наконец я нашел решение! Спасибо огромное!
В моем случае, при сохранении TXTфайла с разделителями табуляции, нужно было записать первым пустой столбец, но любимый EXCEL сносил его и записывал файл таким образом что все столбцы смещались влево на одну позицию. запись Cells(1,1) = chr(09) приводила к возникновению цепочки сиволов кавычки-табуляция-кавычки в начале файла.
Пришлось прописывать Cells(1,1) = "?" (покрайней мере его видно в тексте), и тогда структура вроде сохранялась. Но система под которую этот файлик готовился могла на такое "нововведение" заругаться.
Как же я обрадовался когда удалось удалить из первой позиции аккруратно вырезать этот "?" и перезаписать файл в чистом виде.
Еще раз спасибо.

Спасибо за ресурс! Очень полезный. У меня несколько вопросов:

1) OpenTextFile(filename, 1, True)
второй и третий параметр этой функции что означают?
(а то редактор не выводит всплывающую подсказку)

2) Можно ли как-то считать только вторую строку текстового файла или записать во вторую строку?

3) При выведении значения в ячейку с помощью ReadTXTfile, в конце строки вместо переноса у меня стоит квадратик (нераспознанный знак), этого как-то можно избежать?

Заменить-то можно, но зачем?
Тогда придётся писать в коде дополнительную строку ReadTXTfile = txt
чтобы функция возвратила считанный из файла текст.

А так, как сейчас, всё работает без лишних строк.
(Мы намеренно записываем текст именно в ReadTXTfile, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)

В этом пошаговом руководстве приводятся основные сведения о файловом вводе-выводе в Visual Basic. This walkthrough provides an introduction to the fundamentals of file I/O in Visual Basic. В нем описывается создание небольшого приложения, перечисляющего текстовые файлы в каталоге и анализирующего их. It describes how to create a small application that lists and examines text files in a directory. Для каждого выбранного текстового файла приложение предоставляет атрибуты файла и первую строку содержимого. For each selected text file, the application provides file attributes and the first line of content. Кроме того, предоставляется возможность записать информацию в файл журнала. There is an option to write information to a log file.

В этом пошаговом руководстве используются члены My.Computer.FileSystem Object , доступные в Visual Basic. This walkthrough uses members of the My.Computer.FileSystem Object , which are available in Visual Basic. Дополнительные сведения см. в разделе FileSystem. See FileSystem for more information. В конце пошагового руководства приводится эквивалентный пример, в котором используются классы пространства имен System.IO. At the end of the walkthrough, an equivalent example is provided that uses classes from the System.IO namespace.

Читайте также:  Dying light солнечный квартал

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. The Visual Studio edition that you have and the settings that you use determine these elements. Дополнительные сведения см. в разделе Персонализация среды IDE. For more information, see Personalizing the IDE.

Создание проекта To create the project

В меню Файл выберите пункт Создать проект. On the File menu, click New Project.

Откроется диалоговое окно Новый проект . The New Project dialog box appears.

В области Установленные шаблоны разверните узел Visual Basic и выберите элемент Windows. In the Installed Templates pane, expand Visual Basic, and then click Windows. В середине области Шаблоны щелкните Приложение Windows Forms. In the Templates pane in the middle, click Windows Forms Application.

В поле Имя введите FileExplorer , чтобы задать имя проекта, а затем нажмите кнопку ОК. In the Name box, type FileExplorer to set the project name, and then click OK.

Visual Studio добавит проект в обозреватель решений, после чего откроется конструктор Windows Forms. Visual Studio adds the project to Solution Explorer, and the Windows Forms Designer opens.

Добавьте в форму элементы управления из приведенной ниже таблицы и установите для их свойств соответствующие значения. Add the controls in the following table to the form, and set the corresponding values for their properties.

Элемент управления Control Свойство. Property Значение Value
ListBox ListBox Name Name filesListBox
Button Button Name Name

Text Text

browseButton

Обзор Browse

Button Button Name Name

Text Text

examineButton

Исследовать Examine

CheckBox CheckBox Name Name

Text Text

saveCheckBox

Сохранить результатыSave Results

FolderBrowserDialogFolderBrowserDialog NameName FolderBrowserDialog1

Выбор папки и перечисление файлов в ней To select a folder, and list files in a folder

Создайте обработчик событий нажатия Click для кнопки browseButton , дважды щелкнув этот элемент управления в форме. Create a Click event handler for browseButton by double-clicking the control on the form. Откроется редактор кода. The Code Editor opens.

Добавьте следующий код в обработчик событий Click . Add the following code to the Click event handler.

Вызов FolderBrowserDialog1.ShowDialog открывает диалоговое окно Выбор папки. The FolderBrowserDialog1.ShowDialog call opens the Browse For Folder dialog box. Когда пользователь нажимает OK, свойство SelectedPath передается как аргумент методу ListFiles , который добавляется в следующем шаге. After the user clicks OK, the SelectedPath property is sent as an argument to the ListFiles method, which is added in the next step.

Добавьте приведенный ниже метод ListFiles . Add the following ListFiles method.

Этот код сперва очищает элемент ListBox. This code first clears the ListBox.

Затем метод GetFiles возвращает коллекцию строк — по одной для каждого файла в каталоге. The GetFiles method then retrieves a collection of strings, one for each file in the directory. Метод GetFiles принимает аргумент шаблона поиска, чтобы извлечь файлы, соответствующие определенному шаблону. The GetFiles method accepts a search pattern argument to retrieve files that match a particular pattern. В этом примере возвращаются только файлы с расширением TXT. In this example, only files that have the extension .txt are returned.

Строки, возвращаемые методом GetFiles , затем добавляются в элемент управления ListBox. The strings that are returned by the GetFiles method are then added to the ListBox.

Запустите приложение. Run the application. Нажмите кнопку Обзор. Click the Browse button. В диалоговом окне Выбор папки перейдите в папку, содержащую TXT-файлы, выберите папку и нажмите кнопку ОК. In the Browse For Folder dialog box, browse to a folder that contains .txt files, and then select the folder and click OK.

Элемент ListBox содержит список TXT-файлов в выбранной папке. The ListBox contains a list of .txt files in the selected folder.

Остановите работу приложения. Stop running the application.

Получение атрибутов файла и содержимого текстового файла To obtain attributes of a file, and content from a text file

Создайте обработчик событий нажатия Click для кнопки examineButton , дважды щелкнув этот элемент управления в форме. Create a Click event handler for examineButton by double-clicking the control on the form.

Добавьте следующий код в обработчик событий Click . Add the following code to the Click event handler.

Этот код проверяет, выбран ли элемент в элементе ListBox . The code verifies that an item is selected in the ListBox . Затем он получает запись пути к файлу из элемента ListBox . It then obtains the file path entry from the ListBox . Метод FileExists позволяет проверить, существует ли файл. The FileExists method is used to check whether the file still exists.

Читайте также:  Boot menu dell inspiron

Путь к файлу передается как аргумент методу GetTextForOutput , который добавляется в следующем шаге. The file path is sent as an argument to the GetTextForOutput method, which is added in the next step. Этот метод возвращает строку, содержащую информацию о файле. This method returns a string that contains file information. Информация о файле отображается в элементе MessageBox. The file information appears in a MessageBox.

Добавьте приведенный ниже метод GetTextForOutput . Add the following GetTextForOutput method.

Метод GetFileInfo используется в коде для получения параметров файла. The code uses the GetFileInfo method to obtain file parameters. Параметры файла добавляются в StringBuilder. The file parameters are added to a StringBuilder.

Метод OpenTextFileReader считывает содержимое файла в StreamReader. The OpenTextFileReader method reads the file contents into a StreamReader. Первая строка содержимого файла извлекается из StreamReader и добавляется в StringBuilder . The first line of the contents is obtained from the StreamReader and is added to the StringBuilder .

Запустите приложение. Run the application. Нажмите кнопку Обзор и перейдите в папку с TXT-файлами. Click Browse, and browse to a folder that contains .txt files. Нажмите кнопку ОК. Click OK.

Выберите файл в элементе ListBox и щелкните Исследовать. Select a file in the ListBox , and then click Examine. В окне MessageBox будет выведена информация о файле. A MessageBox shows the file information.

Остановите работу приложения. Stop running the application.

Добавление записи в журнал To add a log entry

В конец обработчика событий examineButton_Click добавьте приведенный ниже код. Add the following code to the end of the examineButton_Click event handler.

Код задает путь к файлу журнала, чтобы файл журнала помещался в тот же каталог, где находится выбранный файл. The code sets the log file path to put the log file in the same directory as that of the selected file. Запись журнала должна содержать текущие дату и время, а далее информацию о файле. The text of the log entry is set to the current date and time followed by the file information.

Метод WriteAllText, которому передается аргумент append со значением True , используется для создания записи в журнале. The WriteAllText method, with the append argument set to True , is used to create the log entry.

Запустите приложение. Run the application. Перейдите к текстовому файлу, выберите его в элементе ListBox , установите флажок Сохранить результаты и щелкните Исследовать. Browse to a text file, select it in the ListBox , select the Save Results check box, and then click Examine. Проверьте, добавлена ли запись в файл log.txt . Verify that the log entry is written to the log.txt file.

Остановите работу приложения. Stop running the application.

Использование текущего каталога To use the current directory

Создайте обработчик событий для события Form1_Load , дважды щелкнув форму. Create an event handler for Form1_Load by double-clicking the form.

Добавьте в обработчик событий приведенный ниже код. Add the following code to the event handler.

Этот код задает текущий каталог в качестве каталога по умолчанию для обозревателя папок. This code sets the default directory of the folder browser to the current directory.

Запустите приложение. Run the application. При первом нажатии кнопки Обзор открывается диалоговое окно Выбор папки с текущим каталогом. When you click Browse the first time, the Browse For Folder dialog box opens to the current directory.

Остановите работу приложения. Stop running the application.

Выборочное включение элементов управления To selectively enable controls

Добавьте приведенный ниже метод SetEnabled . Add the following SetEnabled method.

Метод SetEnabled включает и отключает элементы управления в зависимости от того, выбран ли элемент в элементе ListBox . The SetEnabled method enables or disables controls depending on whether an item is selected in the ListBox .

Создайте обработчик событий SelectedIndexChanged для элемента filesListBox , дважды щелкнув элемент управления ListBox в форме. Create a SelectedIndexChanged event handler for filesListBox by double-clicking the ListBox control on the form.

Добавьте вызов метода SetEnabled в новый обработчик событий filesListBox_SelectedIndexChanged . Add a call to SetEnabled in the new filesListBox_SelectedIndexChanged event handler.

Добавьте вызов метода SetEnabled в конце обработчика событий browseButton_Click . Add a call to SetEnabled at the end of the browseButton_Click event handler.

Добавьте вызов метода SetEnabled в конце обработчика событий Form1_Load . Add a call to SetEnabled at the end of the Form1_Load event handler.

Запустите приложение. Run the application. Флажок Сохранить результаты и кнопка Исследовать отключены, если элемент не выбран в элементе ListBox . The Save Results check box and the Examine button are disabled if an item is not selected in the ListBox .

Полный пример с использованием My.Computer.FileSystem Full example using My.Computer.FileSystem

Ниже приведен полный пример. Following is the complete example.

Ссылка на основную публикацию
Adblock detector