Vba прочитать excel файл

Обновлено: 07.07.2024

Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.

1. Создание объекта

2. Свойства

2.1. Drives

Замечание: только чтение.

3. Методы

3.1. CreateFolder

Назначение: создаёт каталог с указанным именем.

3.2. CopyFile

Назначение: копирует один или несколько файлов.

3.3. CopyFolder

Назначение: рекурсивно копирует каталог.

Описание: процесс копирования прерывается после первой возникшей ошибки.

3.4. MoveFile

Назначение: перемещает один или несколько файлов.

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.

3.5. MoveFolder

Назначение: рекурсивно перемещает один или несколько каталогов.

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.

3.6. DeleteFile

Назначение: удаляет указанный файл.

3.7. DeleteFolder

Назначение: удаляет указанную папку.

3.8. BuildPath

3.9. GetAbsolutePathName

Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).

3.10. GetBaseName

Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.

3.11. GetExtensionName

Назначение: возвращает расширение последнего компонента в заданном пути.

3.12. GetFileName

Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.

3.13. GetParentFolderName

Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).

3.14. GetDriveName

Назначение: возвращает имя диска в заданном пути.

3.15. DriveExists

Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.

Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.

Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.

3.19. GetFile

Описание: если файл не существует, произойдёт ошибка.

3.20. GetFolder

Описание: если каталог не существует, произойдёт ошибка.

3.21. GetSpecialFolder

Описание: если каталог не существует, произойдёт ошибка.

3.22. GetTempName

Назначение: возвращает случайным образом сгенерированное имя файла, которое может быть использовано для создания временного файла.

3.23. CreateTextFile

3.24. OpenTextFile

3.25. GetStandardStream

Описание: метод применим при запуске административного скрипта в консоли с помощью CScript.exe.

3.26. GetFileVersion

Назначение: возвращает номер версии исполняемого файла (строка).

4. Объект Drive

4.1. Создание объекта

4.2. Свойства

4.2.1. AvailableSpace

Замечание: только чтение.

4.2.2. DriveLetter

Замечание: только чтение.

4.2.3. DriveType

Замечание: только чтение.

4.2.4. FileSystem

Замечание: только чтение.

4.2.5. FreeSpace

Замечание: только чтение.

4.2.6. IsReady

Замечание: только чтение.

4.2.7. Path

Замечание: только чтение.

4.2.8. RootFolder

Замечание: только чтение.

4.2.9. SerialNumber

Замечание: только чтение.

4.2.10. ShareName

Замечание: только чтение.

4.2.11. TotalSize

Замечание: только чтение.

4.2.12. VolumeName

Замечание: чтение и запись.

5. Объект File

5.1. Создание объекта

5.2. Свойства

5.2.1. Attributes

Возвращаемое значение: число, набор флагов атрибутов файла. Флаги:

Замечание: чтение и запись или только чтение, в зависимости от атрибута.

Возвращаемое значение: дата создания файла.

Замечание: только чтение.

5.2.3. DateLastAccessed

Возвращаемое значение: дата последнего доступа к файлу.

Замечание: только чтение.

5.2.4. DateLastModified

Возвращаемое значение: дата последней модификации файла.

Замечание: только чтение.

5.2.5. Drive

Замечание: только чтение.

5.2.6. Name

Возвращаемое значение: имя файла.

Замечание: чтение и запись.

5.2.7. ParentFolder

Замечание: только чтение.

5.2.8. Path

Возвращаемое значение: полный путь к файлу.

Замечание: только чтение.

5.2.9. ShortName

Возвращаемое значение: короткое имя файла в формате 8.3.

Замечание: только чтение.

5.2.10. ShortPath

Возвращаемое значение: короткий путь к файлу в формате 8.3.

Замечание: только чтение.

5.2.11. Size

Возвращаемое значение: размер файла в байтах.

Замечание: только чтение.

5.2.12. Type

Возвращаемое значение: тип файла. Информация, похожая на ту, которую можно увидеть в палитре свойств файла в проводнике.

Замечание: только чтение.

5.3. Методы

5.3.1. Copy

Назначение: копирует файл в указанное место.

5.3.2. Move

Назначение: перемещает файл в указанное место.

5.3.3. Delete

Назначение: удаляет файл.

5.3.4. OpenAsTextStream

6. Объект Folder

6.1. Создание объекта

6.2. Свойства

6.2.1. Attributes

Возвращаемое значение: число, набор флагов атрибутов папки. Флаги:

Замечание: чтение и запись или только чтение, в зависимости от атрибута.

Возвращаемое значение: дата создания каталога.

Замечание: только чтение.

6.2.3. DateLastAccessed

Возвращаемое значение: дата последнего доступа к каталогу.

Замечание: только чтение.

6.2.4. DateLastModified

Возвращаемое значение: дата последней модификации каталога.

Замечание: только чтение.

6.2.5. Drive

Замечание: только чтение.

6.2.6. IsRootFolder

Возвращаемое значение: булево (число). Признак того, является ли каталог корневым.

Замечание: только чтение.

6.2.7. Name

Возвращаемое значение: имя каталога.

Замечание: чтение и запись.

6.2.8. ParentFolder

Замечание: только чтение.

6.2.9. Path

Возвращаемое значение: полный путь к каталогу.

Замечание: только чтение.

6.2.10. ShortName

Возвращаемое значение: короткое имя каталога в формате 8.3.

Замечание: только чтение.

6.2.11. ShortPath

Возвращаемое значение: короткий путь к каталогу в формате 8.3.

Замечание: только чтение.

6.2.12. Size

Возвращаемое значение: размер всех файлов и подкаталогов, входящих в данный каталог, в байтах.

Замечание: только чтение.

6.2.13. Type

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

Замечание: только чтение.

6.2.14. SubFolders

Замечание: только чтение.

Создание нового подкаталога:

6.2.15. Files

Замечание: только чтение.

6.3. Методы

6.3.1. Copy

Назначение: копирует каталог в указанное место.

6.3.2. Move

Назначение: перемещает каталог в указанное место.

6.3.3. Delete

Назначение: удаляет каталог со всем содержимым.

6.3.4. CreateTextFile

7. Объект TextStream

7.1. Создание объекта

7.2. Свойства

7.2.1. AtEndOfLine

Возвращаемое значение: содержит True, если указатель достиг конца строки и False в противном случае. Работает только если файл открыт для чтения.

Замечание: только чтение.

7.2.2. AtEndOfStream

Возвращаемое значение: содержит True, если указатель достиг конца файла и False в противном случае. Работает только если файл открыт для чтения.

Замечание: только чтение.

7.2.3. Column

Возвращаемое значение: содержит номер колонки текущего символа файла.

Замечание: только чтение.

7.2.4. Line

Возвращаемое значение: содержит номер текущей строки файла.

Замечание: только чтение.

7.3. Методы

7.3.1. Close

Назначение: закрывает открытый файл.

7.3.2. Read

Назначение: считывает из файла указанное количество символов и возвращает полученную строку.

7.3.3. ReadAll

Назначение: считывает весь файл и возвращает полученную строку.

Описание: для больших файлов использование этого метода потребует больших ресурсов памяти.

7.3.4. ReadLine

Назначение: считывает строку из файла и возвращает полученную строку.

7.3.5. Skip

Назначение: пропускает при чтении файла указанное количество символов.

7.3.6. SkipLine

Назначение: пропускает при чтении файла строку.

7.3.7. Write

Назначение: записывает в файл указанную строку. Символы возврата каретки и новой строки в файл не записываются.

7.3.8. WriteLine

Назначение: записывает в файл указанную строку. В файл записываются символы возврата каретки и новой строки.

7.3.9. WriteBlankLines

Назначение: записывает в файл указанное количество пустых строк (символы возврата каретки и новой строки).

  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.
  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.
  • Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
  • Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.

Функция EOF

Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.

Синтаксис функции EOF:

Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.

Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.

Примеры чтения и записи в файл

Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.

Open ThisWorkbook . Path & "\myFile1.txt" For Output As ff

Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.

Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.

Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.

Open ThisWorkbook . Path & "\myFile1.txt" For Input As ff 'Считываем строку из файла и записываем в переменные

Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Не получается чтение/запись ячеек файла Excel
В программе просто открывается файл из текущей дериктории и я пытаюсь вывести на консоль значение.


Чтение значений ячеек Excel
Добрый день всем. Прошу помочь в решении задачи. В Сети много информации по работе с Excel через.

Excel, чтение и запись ячеек
Здравствуйте! надо перебрать ячейки "коды 1" в столбце А и записать данные с этих ячеек в.

Как можно осуществлять чтение-запись ячеек экселевского файла?
собственно subj. интересует вопрос, как это можно сделать в обход объекта Workbook (ввиду.

Решение

Для начала сделай ссылку на объектную библиотеку Microsoft Office Excel = Microsoft Office Excel X.X Object Library. Если офис не установлен или нужна совместимость с ранними офисами - сделай ссылку на соответствующую библиотеку PIA (читать и брать здесь).

Далее, в форме или в модуле импортируй пространства имен:

а если будешь использовать константы, то еще так:

Когда Excel больше не нужнен:

Решение

Это пишет инфо в ячейку и добавляет новую строку в лист (для примера). Прочитать думаю будет ничуть не сложнее. Ах. да
Памирыч, это кажется называется "позднее связывание"? Да - тоже вариант. Да бес его знает.
Просто я не люблю подключать компоненты в референсах - таскать библы за экзешником не люблю [QUOTE=Памирыч;1337118]Как вариант. Подключать ничего не нужно:

Подскажите, как повернуть в этом случае лист по горизонтали?

Я имею в ввиду для печати.

Подскажите, как повернуть в этом случае лист по горизонтали О_о Если честно, то я даже в самом Экселе ни разу такого не видал, не то что программно!
Ну а если сильно надо и умеешь в экселе это делать пиши макрос и переделывай константы под Басю. Да бес его знает.
Просто я не люблю подключать компоненты в референсах - таскать библы за экзешником не люблю с подключением это выглядит так:
.Orientation = XlPageOrientation.xlLandscape

Что означает часть кода:

И как узнать последнюю занятую ячейку?
Когда я использовал следующий код :

хм, старый вопрос, но отвечу. Попробуйте так

P.S. Но не забудьте подключить библиотеку Excel
Imports Microsoft.Office.Interop.Excel
и галочку поставить в Reference на Microsoft Excel 11 object library

P.P.S. Но я бы вам советовал искать не "сверху вниз", а "снизу вверх"

Вообще есть еще проще способ =)
Просто использовать UsedRange - это диапазон используемый пользователем. Bati4eli, а что это даёт? UsedRange - это диапазон ячеек, который Excel воспринимает, как занятый данными. Но это не всегда так. Допустим у вас есть таблица в диапазоне A1 : D20. И UsedRange будет равен диапазону A1 : D20. А теперь давайте введём число 5 в ячейку . Z1000, а потом удалим это число. и теперь UsedRange равен диапазону A1:Z1000 - хотя данных ниже 20-й строки у нас уже нет. Т.е. Excel запомнил, что где-то там внизу мы что-то когда-то ввели и теперь для него использованный диапазон заканчивается на 1000 строке, а не на 20-й, где есть реальный данные. Т.е. если вы заходите использовать UsedRange для определения последней строки и вставите новые данные в последнию строку UsedRange.Rows.Count + 1 - она у вас будет 1001 строкой, а вам нужна 21-я строка Что-то да UsedRange в данном случае не в тему.
Очень часто его диапазон реально больше используемого. Подскажите пожалуйста, еще один вопрос в тему: как обратиться к уже открытой книге?

Думаю по аналогии

Вот тут переменная exlWB будет ваша открытая книга

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

слово "New".
И затем как-то передать переменной exl открытый эксель.
Должно быть что-то вроде следующего:

Bati4eli, что-то не получается.

Добавлено через 40 минут

Добавлено через 57 секунд
А если еще по теме:

Перенос ячеек внутри файла excel
есть таблица excel: Лист1 столбец A: 1022 уникальных номеров (регистрационные номера банков) .


Получение диапазона ячеек из excel файла
Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet.

В зависимости от ячеек автозамена названия файла книги Excel
Последняя мелочь, в создании просчет программы для клиента: Нужно из ячеек ФИО и ячейки даты, при.

Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.

Синтаксис

выражения. Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

выражение Переменная, представляюная объект Книги.

Параметры

Имя Обязательный или необязательный Тип данных Описание
FileName Необязательный Variant String. Имя файла книги, которая должна быть открыта.
UpdateLinks Необязательный Variant Указывает, как обновляются внешние ссылки (ссылки) в файле, например ссылка на диапазон Budget.xls книги в следующей =SUM([Budget.xls]Annual!C10:C25) формуле. Если этот аргумент не указан, пользователю будет предложено указать, как будут обновляться ссылки. Дополнительные сведения о значениях, используемых этим параметром, см. в разделе Примечание.

Возвращаемое значение

Объект Книги, представляю который представляет открытую книгу.

Примечания

По умолчанию макрос включен при открытии файлов программным путем. Используйте свойство AutomationSecurity, чтобы настроить режим макрос безопасности, используемый при открытии файлов программным способом.

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

Значение Описание
0 Внешние ссылки (ссылки) не обновляются после открытия книги.
3 Внешние ссылки (ссылки) будут обновляться после открытия книги.

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

Значение Delimiter
1 Вкладки
2 Запятые
3 Пробелы
4 Semicolons
5 Отсутствует
6 Настраиваемый символ (см. аргумент Delimiter)

Пример

В следующем примере кода откроется книга Analysis.xls, а затем выполняется Auto_Open макрос.

В следующем примере кода лист из другой книги импортируется на новый лист в текущей книге. Sheet1 в текущей книге должен содержать имя пути для импорта книги в ячейке D3, имя файла в ячейке D4 и имя листа в ячейке D5. Импортируемый лист вставляется после sheet1 в текущей книге.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

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

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

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

Комментарии

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

Как можно задать строки для чтения/записи из 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)

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

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

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

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

Можно с помощью Вашей функции взять только определенные строки, например со 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, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)

Читайте также: