Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Копировать строки в массив
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 10 ]
1 05.12.2013 21:53:20
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Тема: Копировать строки в массив
Здраствуйте.
Юрий М(с этого сайта: внешняя ссылка)
посоветовал этот сайт: http://wordexpert.ru/
Вот мой вопрос:
Как можно скопировать все строки файла docx
в 1-мерный массив MyArray()???
Должно получиться так:
MyArray(1)="Это 1-ая строка"
MyArray(2)="Это 2-ая строка"
...
MyArray(10)="Это последняя строка"
2 Ответ от shanemac51 05.12.2013 22:21:14
- shanemac51
- генерал-полковник
- Неактивен
- Зарегистрирован: 05.03.2012
- Сообщений: 467
- Поблагодарили: 119
Re: Копировать строки в массив
строка или параграф(абзац)
3 Ответ от UserSuperPupsik 05.12.2013 22:45:16
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Re: Копировать строки в массив
В чём разница?
Например дан текст:
Это 1-ая строка
Это 2-ая строка, да.
Это последняя строка, да.
А должно получится так:
MyArray(1)=" Это 1-ая строка"
MyArray(2)="Это 2-ая строка, да"
...
MyArray(10)="Это последняя строка, да"
Думаю сейчас прояснилось.
Если нет, то Вы мне объясните в чём разница, пожалуйста.
4 Ответ от shanemac51 05.12.2013 23:07:33
- shanemac51
- генерал-полковник
- Неактивен
- Зарегистрирован: 05.03.2012
- Сообщений: 467
- Поблагодарили: 119
Re: Копировать строки в массив
Перед фрагментом текста с новой ориентацией страниц и после него будут автоматически вставлены разрывы раздела . Если документ уже разбит на разделы, можно щелкнуть в любом месте нужного раздела (либо выделить несколько разделов), а затем изменить ориентацию страниц только в выбранных разделах.
===
ПАРАГРАФ=1
строк-5
5 Ответ от UserSuperPupsik 06.12.2013 00:29:18
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Re: Копировать строки в массив
shanemac51, извините я старался, но Вас не понял.При чём тут ориентация, разрывы и разделы
Дело в том, что я работал всегда с excel vba.
А о word vba ничего не знаю.
Можете дать хоть какой-нибудь примерчик???Чтобы было ясно о чём идет речь.
Спасибо за внимание!
6 Ответ от UserSuperPupsik 06.12.2013 00:45:31
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Re: Копировать строки в массив
Вот мой файл. Там есть (переходы на следующую строку)- простой случай
Можете туда положить макрос?
Post’s attachments
1.docm 10.04 Кб, 4 скачиваний с 2013-12-06
You don’t have the permssions to download the attachments of this post.
7 Ответ от UserSuperPupsik 08.12.2013 14:53:45
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Re: Копировать строки в массив
Вот мой вопрос:
Как можно скопировать все строки файла docx
в 1-мерный массив MyArray()???
Должно получиться так:
MyArray(1)=»Это 1-ая строка»
MyArray(2)=»Это 2-ая строка»
MyArray(10)=»Это последняя строка»
Примечание: Новая Строка начинается после (перехода на следующую строку)(или на жатия «enter»)
Ответьте пожалуйста!
8 Ответ от aap77 10.12.2013 11:33:04
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Копировать строки в массив
Вот функция для записи одномерного массива строк документа.
Public Function AllStroke_inArray() As Variant
Dim AWind As Window
Dim APane As Pane
Dim Pages As Pages
Dim Page As Page
Dim Rect As Rectangle
Dim LineCount As Long
Dim lst() As Variant
Dim Line As Line
Set AWind = Application.ActiveWindow
Set APane = AWind.ActivePane
Set Pages = APane.Pages
'---------------------------------------------------------------------
For Each Page In Pages
If Page.Rectangles.Count = 1 Then
Set Rect = Page.Rectangles(1)
Else
Set Rect = Page.Rectangles(2)
End If
LineCount = LineCount + Rect.Lines.Count
Next Page
LineCount = LineCount - 1
'---------------------------------------------------------------------
ReDim Preserve lst(0 To LineCount)
'---------------------------------------------------------------------
i = -1
For Each Page In Pages
If Page.Rectangles.Count = 1 Then
Set Rect = Page.Rectangles(1)
Else
Set Rect = Page.Rectangles(2)
End If
For Each Line In Rect.Lines
i = i + 1
lst(i) = Line.Range.Text
Next Line
Next Page
'---------------------------------------------------------------------
AllStroke_inArray = lst
End Function
Учтите что массив это область хранения информации, поэтому может быть функцией (Function) для присвоения ее другим переменным в других процедурах, либо свойством какого-либо класса (Property).
9 Ответ от aap77 10.12.2013 12:11:01
- aap77
- генерал-полковник
- Неактивен
- Зарегистрирован: 12.09.2011
- Сообщений: 925
- Поблагодарили: 243
Re: Копировать строки в массив
UserSuperPupsik, если возникают вопросы пишите.
10 Ответ от UserSuperPupsik 10.12.2013 12:36:56
- UserSuperPupsik
- рядовой
- Неактивен
- Зарегистрирован: 05.12.2013
- Сообщений: 6
Re: Копировать строки в массив
aap77, Даже и не знаю что сказать, Вы весьма проницательный человек, Спасибо, за Ваш труд!!!
Я немного изменил код под собственные нужды:
Public lst() As Variant
Public Function CopyToArray() As Variant
Dim AWind As Window
Dim APane As Pane
Dim Pages As Pages
Dim Page As Page
Dim Rect As Rectangle
Dim LineCount As Long
'Dim lst() As Variant
Dim Line As Line
Set AWind = Application.ActiveWindow
Set APane = AWind.ActivePane
Set Pages = APane.Pages
'---------------------------------------------------------------------
For Each Page In Pages
If Page.Rectangles.Count = 1 Then
Set Rect = Page.Rectangles(1)
Else
Set Rect = Page.Rectangles(2)
End If
LineCount = LineCount + Rect.Lines.Count
Next Page
LineCount = LineCount - 1
'---------------------------------------------------------------------
ReDim Preserve lst(0 To LineCount)
'---------------------------------------------------------------------
i = -1
For Each Page In Pages
If Page.Rectangles.Count = 1 Then
Set Rect = Page.Rectangles(1)
Else
Set Rect = Page.Rectangles(2)
End If
For Each Line In Rect.Lines
i = i + 1
lst(i) = Line.Range.Text
Next Line
Next Page
'---------------------------------------------------------------------
'CopyToArray = lst
End Function
Public Sub Macros1()
CopyToArray 'копировать все строки в массив lst, внимание индексация начинается с 0
MsgBox (lst(2)) 'вывести на экран 3-ю строку
End Sub
Сообщений [ 10 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Похожие темы
- Пропадают все стили при операции: Копировать => Вставить
- как соединить строки
- Строки в комбобокс
- Разбивка на строки
- Поменять строки местами: Я на А, Ю на Б, Э на В и т.д.
- Высота строки в таблице
- Определение конца строки
- Как сделать полужирными строки 18, 19, 20
Копировать строки в массив
Постоянно работая с теми либо иными инструментами и выполняя однотипные задачи, пользователь любой программы вырабатывает со временем способы наиболее рационального их исполнения. Наш сайт о Microsoft Office Word даст ответ про: как нумеровать страницы в ворде.
Но, сталкиваясь с задачей другого типа, часто оказывается в тупике и вынужден обращаться за помощью. Наш сайт о Microsoft Office Word даст ответ про: применить формулу умножения в ворде.
На форуме сайта Ворд Эксперт пользователи различных версий Ворда делятся друг с другом вариантами решений привычных для них операций. Наш сайт о Microsoft Office Word даст ответ про: комбинация клавиш открытие буфера обмена в word.
При этом то, что кажется вам самим собой разумеющимся может быть неизвестно другому участнику и наоборот, поэтому обмен получается очень взаимовыгодным. На портале о Microsoft Office Word вы узнаете про: как проставить нумерацию в таблице.
Здесь обсуждаются настройки, форматирование документов, например, удаление лишних пробелов, оформление содержания и придания требуемых стилей разделам автоматически и так далее. Наш сайт о Microsoft Office Word даст ответ про: word а1.
Очень много внимания уделено принципам написания макросов и шаблонов, изложенным очень доступно, приведены готовые варианты. На портале о Microsoft Office Word вы узнаете про: скопировать таблицу из word.
Информацию можно отыскать по всем версиям приложения. Также можно оставить заявку на выполнение любой работы, связанный с Вордом. На портале о Microsoft Office Word вы узнаете про: убрать в word колонтитулы раздел.
Найдете на форуме и ответы на базовые вопросы, и дополнительный список источников. Обсудить проблемы, прямо не касающиеся Ворда, и оставить отзыв можно в разделе «Общение». На портале о Microsoft Office Word вы узнаете про: вставить кнопку в ворде 2007.
AnnetteKr 0 / 0 / 0 Регистрация: 30.06.2020 Сообщений: 4 |
||||
1 |
||||
Word 01.07.2020, 13:12. Показов 1659. Ответов 7 Метки нет (Все метки)
Имеется задание:
0 |
Narimanych 2632 / 1637 / 745 Регистрация: 23.03.2015 Сообщений: 5,149 |
||||
01.07.2020, 15:42 |
2 |
|||
Сообщение было отмечено AnnetteKr как решение РешениеAnnetteKr, как один из вариантов: Кликните здесь для просмотра всего текста
1 |
0 / 0 / 0 Регистрация: 30.06.2020 Сообщений: 4 |
|
02.07.2020, 07:03 [ТС] |
3 |
Narimanych, Спасибо! Сработало!
0 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
02.07.2020, 08:09 |
4 |
(.Execute(Selection).Count) Это метод RegExp на выполнение обработки строки, т.е. получение количества строк в массиве. Регэксп — это такая штука, которой даёшь строку, паттерн и необязательную строку для замены. Он по паттерну пытается разобрать строку и возвращает список найденного или строку под замену. Умение придумывать подходящие паттерны — это особый дар
1 |
Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
|
02.07.2020, 08:15 |
5 |
Умение придумывать подходящие паттерны — это особый дар увы, я никак не могу вникнуть в логику сложных паттернов, даже простые пишу с трудом, хотя методичку наверно раз 5 прочитала
1 |
779 / 461 / 79 Регистрация: 18.05.2016 Сообщений: 1,242 Записей в блоге: 4 |
|
02.07.2020, 09:02 |
6 |
Паттерны можно только придумывать. Читать их совсем нереально
0 |
0 / 0 / 0 Регистрация: 30.06.2020 Сообщений: 4 |
|
02.07.2020, 10:03 [ТС] |
7 |
shanemac51, а что за методичка такая?
0 |
Модератор 11343 / 4661 / 749 Регистрация: 07.08.2010 Сообщений: 13,512 Записей в блоге: 4 |
|
02.07.2020, 10:15 |
8 |
начала самостоятельно изучать язык программирования вряд ли паттерны относятся к началам программирования, у вас сейчас много проблем с более нужными понятиями я имела а виду описание по RegExp — описание параметров и команд, точного названия не помню(последняя попытка освоения была более года назад)
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
02.07.2020, 10:15 |
Помогаю со студенческими работами здесь При открытии документа word 2013 в word 2010 меняется структура текста Перенос диапазона текста+рисунков+таблиц из Word в шаблон Word через макрос Excel Дан массив слов. Сформировать массив из длин этих слов и вычислить в нем максимум из четных элементов Дан массив слов. Сформировать массив из длин этих слов и вычислить в нем максимум Как лучше всего сделать сохранение >100 страниц из word шаблона с заменой ключ. слов в один word файл для посл. печати? Точнее не думаю, я уже приступлю к созданию всего этого завтра, но хотел бы… Функция, получает строку слов и рзделителей, а на выходе имеет массив слов из строки и количество этих слов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
Asked
11 years, 1 month ago
Viewed
7k times
I want to to get the total word document text into a variable and want to split the string into an array with newline as delimiter. How can I do that?
Dim str
str = ActiveDocument.?
asked Feb 25, 2012 at 23:41
Is this a «doc» file or a «txt» file?
something like this should work
Sub Test()
Dim arr() As String
arr = Split(ActiveDocument.Content.Text, Chr(13))
End Sub
answered Feb 26, 2012 at 4:00
brettdjbrettdj
54.6k16 gold badges113 silver badges176 bronze badges
0
vikttur Пользователь Сообщений: 47199 |
Пробую работать с документами Word. Копирование данных в Excel. Прикрепленные файлы
|
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#2 03.12.2013 18:47:38 Может так?
Или анализировать ActiveDocument.Range.Text, продумывать как разбивать этот текст для массива вывода на лист. Изменено: anvg — 03.12.2013 18:48:15 |
|
vikttur Пользователь Сообщений: 47199 |
#3 03.12.2013 19:02:42 Наверное, проще. Еще не пробовал. Спасибо.
Может, без этого? |
||
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#4 03.12.2013 19:21:26
Вот только как, в смысле — загнать? Такого «красивого» Range.Value, дающего массив, в Word ни для текста объекта Range, ни для ячеек таблиц. Можно, конечно, запросить у таблицы число строк/столбцов и циклом по ячейкам (ThisDocument.Tables(1).Cell(idRow, idCol).Range.Text) считать значения в массив, только сомневаюсь, что это будет будет быстрее, чем копировать/вставлять просто текст без форматирования. |
||
vikttur Пользователь Сообщений: 47199 |
Ясно. Я объектную модель Excel плохо знаю, а уж Word… |
SkyPro Пользователь Сообщений: 309 |
#6 03.12.2013 20:13:53 Нашел здесь: http://www.cyberforum.ru/vba/thread693224.html Может поможет
SkyPro |
||
vikttur Пользователь Сообщений: 47199 |
#7 03.12.2013 20:51:19 Что подтверждает: быстрее и проще копировать-вставить, а уже потом над данными издеваться. |
1) Непонятно что означает «от home до end» ? Имеется в виду нажатие клавиш
в активном документе ? Вы уверены что правильно сформулировали вопрос и вас действительно интересуют строки внешнего представления документа (без связи
с данными). Поясню, что я имею в виду.
a) aaaaaaaaaaaaaaaaaaa;bbbbbbbbbbbbbbbb;ccccccccccccccccccccccn ddddddddd
b) aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;bbbbbbbbbbbbbbbbbbbbbbbbb;ccccccccccccccccccccc
ddddddddddddddddd
в варианте a) переход на новую строку осуществляется поле кода chr(13)
в варианте b) 2-я строка начинается без специального разделителя
2) Если » в тексте n строк, нужно выбрать от 1 до n», то это означает что выбирается весь текст что противоречит
Подскажите, пожалуйста, как выбрать конкретную строку (например, пятую),
Или мы должны догадаться
что обработка вам нужна для каждой строки?
3) Вы имеете в виду a(1) = первое слово , b(1) = второе слово, c(1) = третье слово ?
закинуть первое слово в один массив, второе слово в другой массив, третье слово в третий массив.
Или всё таки не в «другой массив» а в другой элемент массива ?
Резюмируя ещё раз : «нужно чётче формулировать вопрос»
Если предположить, что вам нужно обработать документ каждая строка которого
представляет собой параграф и содержит 3 слова разделённых «;» , то это будет выглядеть так:
Код: Выделить всё
Public Sub Example()
Dim w As Range
Dim a(1 To 3) As String
Dim i As Long
i = 1
With ActiveDocument
For i = 1 To .Words.Count Step 6
a(1) = .Words(i)
a(2) = .Words(i + 2)
a(3) = .Words(i + 4)
' выводим очередные 3 слова как элементы массива a
Debug.Print a(1), a(2), a(3)
Next i
End With
End Sub