rioba 0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
||||
1 |
||||
24.12.2017, 19:12. Показов 7166. Ответов 11 Метки нет (Все метки)
Как прочитать построчно в Word ?
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
24.12.2017, 19:12 |
11 |
Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,497 Записей в блоге: 4 |
|
24.12.2017, 19:46 |
2 |
Как прочитать построчно в Word ? не поняла вопроса …. может пример выложите
0 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
24.12.2017, 19:48 [ТС] |
3 |
shanemac51, допустим в word имеется список: Как мне построчно посчитать ?
0 |
Заблокирован |
|
24.12.2017, 20:01 |
4 |
rioba, а кроме этих строк (в данном случае трех) в документе есть ещё что-нибудь? Добавлено через 1 минуту
0 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
24.12.2017, 20:02 [ТС] |
5 |
Остап Бонд,
0 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
24.12.2017, 20:04 [ТС] |
6 |
0 |
Заблокирован |
||||
24.12.2017, 20:06 |
7 |
|||
Оно?
0 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
24.12.2017, 20:12 [ТС] |
8 |
Остап Бонд, Спасибо большое!
0 |
Заблокирован |
||||
24.12.2017, 20:20 |
9 |
|||
Сообщение было отмечено rioba как решение Решение
1 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
25.12.2017, 17:57 [ТС] |
10 |
Остап Бонд, Спасибо
0 |
Заблокирован |
|
25.12.2017, 18:22 |
11 |
rioba, пример приложите.
0 |
0 / 0 / 1 Регистрация: 16.04.2012 Сообщений: 34 |
|
26.12.2017, 17:33 [ТС] |
12 |
Остап Бонд, все работает, моя ошибка)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
26.12.2017, 17:33 |
12 |
В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.
Способ 1. Открытие (чтение) текстового файла целиком
Можно открыть текстовый файл без учета каких-либо разделителей, сплошным текстом:
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("имя_файла")
либо, если используются разделители колонок, можно их задействовать:
Открытие текстового файла с разделителем Tab:
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Tab:=True
Открытие текстового файла с разделителем ; (точка с запятой):
Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Other:=True, OtherChar:=";"
В параметрах можно так же добавить Origin:=xlMSDOS, если текстовый файл в DOS-кодировке.
После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.
Способ 2. Чтение текстового файла построчно
Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.
f = FreeFile Open "имя_файла" For Input As #f Do While Not EOF(f) Line Input #f, s ' что-нибудь делаем с полученной строкой s Loop Close f
В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.
Формулировка задачи:
Как прочитать построчно в Word ?
Вот что смог накидать но уходит в цикл либо ошибка
Код к задаче: «Построчное чтение Word»
textual
Dim a() As String a = Split(Split(ActiveDocument.Range.Text, "Список:")(1), vbCr) Dim i As Long For i = 1 To UBound(a) - 2 MsgBox a(i) Next
Полезно ли:
9 голосов , оценка 4.000 из 5
В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.
Способ 1. Открытие (чтение) текстового файла целиком
Можно открыть текстовый файл без учета каких-либо разделителей, сплошным текстом:
либо, если используются разделители колонок, можно их задействовать:
Открытие текстового файла с разделителем Tab:
Открытие текстового файла с разделителем ; (точка с запятой):
В параметрах можно так же добавить Origin:=xlMSDOS , если текстовый файл в DOS-кодировке.
После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.
Способ 2. Чтение текстового файла построчно
Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.
В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.
Практическое руководство. Чтение из текстовых файлов в Visual Basic
Метод ReadAllText объекта My.Computer.FileSystem позволяет считывать данные из текстового файла. Если содержимое файла имеет определенную кодировку, например ASCII или UTF-8, ее можно указать в аргументе.
Если вы производите чтение из файла с символами национальных алфавитов, необходимо указать кодировку файла.
Чтобы прочитать файл по одной строке, используйте метод OpenTextFileReader объекта My.Computer.FileSystem . Метод OpenTextFileReader возвращает объект StreamReader. С помощью метода ReadLine объекта StreamReader можно прочитать файл по одной строке. Проверить, достигнут ли конец файла, можно с помощью метода EndOfStream объекта StreamReader .
Чтение данных из текстового файла
Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь. В следующем примере содержимое файла test.txt считывается в строку и затем отображается в окне сообщения.
Чтение данных из зашифрованного текстового файла
Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь и тип кодировки файла. В следующем примере содержимое файла test.txt в кодировке UTF32 считывается в строку и затем отображается в окне сообщения.
Отказоустойчивость
При следующих условиях возможно возникновение исключения:
Путь является недопустимым, поскольку путь представляет собой строку нулевой длины (пустую строку), либо содержит только пробелы, либо содержит недопустимые знаки, либо представляет собой путь к устройству (ArgumentException).
Путь не является допустимым, поскольку он равен Nothing (ArgumentNullException).
Файл уже используется другим процессом или возникла ошибка ввода-вывода (IOException).
Длина пути превышает максимальную длину, определенную в системе (PathTooLongException).
Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат (NotSupportedException).
Не хватает памяти для записи строки в буфер (OutOfMemoryException).
У пользователя отсутствуют необходимые разрешения на просмотр пути (SecurityException).
По имени файла не всегда можно с уверенностью судить о его содержимом. Например, файл с именем Form1.vb может вовсе не быть исходным файлом Visual Basic.
Следует проверять все входные данные перед использованием их в приложении. Содержимое файла может отличаться от ожидаемого, поэтому может не удаться прочесть файл с помощью методов чтения.
Функции для работы с текстовыми файлами
Данные функции предназначены для работы с текстовыми файлами из VBA Excel.
Используя эти функции, вы при помощи одной строки кода сможете записать текст из переменной в файл, или наоборот, загрузить содержимое текстового файла в переменную.
Чтение текстового файла в переменную:
- 101835 просмотров
Комментарии
Могу написать макрос под заказ (платно)
Как можно задать строки для чтения/записи из 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
Никто не спорит, — улучшать (дорабатывать) функцию можно бесконечно.
Чтобы нужные строки из файла брались, — кода будет в несколько раз больше.
Можете сами написать подобную функцию, взяв за основу этот код,
и сделав выборку нужный строки из массива.
Ну или заказать готовое решение.
А вопрос то актуальный. Дополнив функцию этой возможностью, её функционал стал бы гораздо качественне.
Можно с помощью Вашей функции взять только определенные строки, например со 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, а не в какую-то текстовую переменную, поскольку функция должна возвратить загруженный текст)
I need to find a specific string of text from a large source of material. I’ve just used Excel VBA up to this point, so I don’t know the Word objects and I ended up just recording some macros and working with what I had. However, this way is very inefficient. I looked on Stack Overflow, but I didn’t understand what they were doing, so I just did it this way.
What I am mostly looking for is the objects used in Word VBA that are equivalent to the Excel ‘Range’, ‘Cells’, ‘Row’, and ‘Column’. I looked on MSDN, but there is so much material there that you need to have an idea of what you are looking for, and I couldn’t find any other sites that would help.
This is what I wrote, and it did the job, but it is very inefficient.
Sub FindMediaInBraces()
' Separate needed text
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Text = "[Media"
.Replacement.Text = "^p^p[Media"
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Text = ".jpg]"
.Replacement.Text = ".jpg]^p^p"
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.HomeKey Unit:=wdStory
With Selection.Find
.Text = ".png]"
.Replacement.Text = ".png]^p^p"
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
' Remove text that doesn't start correctly
Dim i As Long
Selection.HomeKey Unit:=wdStory
For i = 1 To ActiveDocument.Paragraphs.count
Selection.MoveDown Unit:=wdParagraph, count:=1, Extend:=wdExtend
With Selection.Find
.Execute FindText:="[Media"
.Forward = True
If .Found = True Then
Selection.MoveDown Unit:=wdParagraph, count:=1
Else
Selection.Delete Unit:=wdCharacter, count:=1
End If
End With
Next
End Sub
Example Text
Original
Type: MC
Objectives: 2.6
16) [HTML]If <i>y</i> varies directly with <i>x</i>, write an equation for the direct variation. Then find the value. If <i>y</i> = -4 when <i>x</i> = -28, what is the value of <i>x</i> when <i>y</i> = 5?[/HTML]
*a. `$y=frac{1}{7}x;,, 35$`
b. `$y=-frac{1}{7}x;,, -35$`
c. `$y=7x;,, frac{5}{7}$`
d. `$y=-7x;,, -frac{5}{7}$`
Type: MC
Objectives: 3.3
21) Select the graph that correctly represents the following system of equations:
`$y=-frac{5}{3}x+3$`
`$y=frac{1}{3}x-3$`
*a. [Media:Media/Images/Problem 21a.jpg]
b. [Media:Media/Images/Problem 21b.jpg]
c. [Media:Media/Images/Problem 21c.jpg]
d. [Media:Media/Images/Problem 21d.jpg]
After Macro
[Media:Media/Images/Problem 21a.jpg]
[Media:Media/Images/Problem 21b.jpg]
[Media:Media/Images/Problem 21c.jpg]
[Media:Media/Images/Problem 21d.jpg]
This is what I found on Stack Overflow, but I don’t know the objects to use to apply it, and I don’t know if it would actually work in this case.
dim str as string
dim openPos as integer
dim closePos as integer
dim midBit as string
str = "NUMBER(8,3)"
openPos = instr (str, "(")
closePos = instr (str, ")")
midBit = mid (str, openPos+1, closePos - openPos - 1)