Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
 
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
1

Изменение текста

01.06.2020, 14:28. Просмотров 434. Ответов 15
Метки нет (Все метки)

Здравствуйте.
Столкнулся с проблемой, буду рад если кто-то подскажет хотя бы алгоритм.
Мне необходимо заменить текст выделенный красным цветом на другой текст.
Текст требующий замены может быть ЛЮБЫМ.
0
Миниатюры
Изменение текста   Изменение текста  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2020, 14:28
Ответы с готовыми решениями:

Изменение текста заголовка в оглавлении
Доброго времени суток. Я создал в документе оглавление, выделил текст, на который должен указывать...

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

Несанкционированное изменение размера текста в таблице Word 2016
Уважаемые специалисты! Помогите решить проблему в Word 2016: Текст в таблице автоматически...

Изменение цвета текста в ячейке
Здравствуйте! Мне нужно чтобы у меня в Excel файле была автоматическая смена цвета текста в...

15
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
01.06.2020, 14:35 2
vlanatvaszla, речь про автоматизированную замену в большом количестве страниц? Или в чем конкретно проблема заключается, задача-то какая?
Очень многое зависит от макета страницы - приложите скрин страницы с включенным отображением скрытых символов и скрытых таблиц.
1
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
01.06.2020, 14:55  [ТС] 3
Да, речь идёт про автоматизированную замену в большом количестве страниц.
Задача заменить адрес под "Invoice To:" другим адресом.
0
Вложения
Тип файла: 7z Test.7z (27.1 Кб, 5 просмотров)
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
01.06.2020, 16:07  [ТС] 4
"Invoice To:" я нашёл. А вот что дальше делать пока не знаю.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
             Set rngSearch = wrdParentDoc.Content
             rngSearch.Find.ClearFormatting
             rngSearch.Find.Replacement.ClearFormatting
             
             With rngSearch.Find
                 .Text = "Invoice To:"
                 .Forward = True
                 .Wrap = wdFindStop
                 .Format = False
                 .MatchCase = False
                 .MatchWholeWord = True
             End With
             
             rngSearch.Find.Execute
 
             If rngSearch.Find.Found Then
Добавлено через 32 минуты
Может как-то использовать после нахождения "Invoice To:", код
Visual Basic
1
2
Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=1
Selection.TypeText Text:="Новый дом"
только пока не знаю как очистить старые данные.

Добавлено через 16 минут
Или есть способ просто использовать find с регулярными выражениями?
0
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
01.06.2020, 16:25 5
Цитата Сообщение от vlanatvaszla Посмотреть сообщение
"Invoice To:" я нашёл.
vlanatvaszla, все-таки задачу я не очень понимаю: вы хотите удалить любой текст, который идет после Invoice To: до разрыва столбца на некий новый - при этом какой был старый значения не имеет?
Попробуйте в диалоге поиск и замена поставить галочку "Подстановочные знаки" (нужно нажать на кнопку "больше"), в строке запроса вбить
Код
(Invoice To:)(*)(^n)
в строке замены:
Код
\1^13Новый текст^13Новый адрес^13\3
где ^13 - это знак абзаца, их проставьте по необходимости сколько нужно.
1
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
01.06.2020, 19:09  [ТС] 6
Цитата Сообщение от Dinoxromniy Посмотреть сообщение
vlanatvaszla, все-таки задачу я не очень понимаю: вы хотите удалить любой текст, который идет после Invoice To: до разрыва столбца на некий новый - при этом какой был старый значения не имеет?
Да.

Цитата Сообщение от Dinoxromniy Посмотреть сообщение
Попробуйте в диалоге поиск и замена поставить галочку "Подстановочные знаки" (нужно нажать на кнопку "больше"), в строке запроса вбить
Мне нужно решение на vba

Решение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
             Set rngSearch = wrdParentDoc.Content
             rngSearch.Find.ClearFormatting
             rngSearch.Find.Replacement.ClearFormatting
             
             ' start searching for a character
             With rngSearch.Find
                 .Text = "<Invoice To:>(*)(^n)"
                 .Replacement.Text = "\1^13<Cordis Park LLP>^13<7 Bell Yard,>\3"
                 .Forward = True
                 .Wrap = wdFindStop
                 .Format = False
                 .MatchCase = False
                 .MatchWholeWord = True
                
                 .Execute Replace:=wdReplaceAll
             End With
             
            Set rngSearch = Nothing
не работает. Скорее всего что-то с синтаксисом регулярного выражения.

Добавлено через 5 минут
Так тоже не работает:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
             Set rngSearch = wrdParentDoc.Content
             rngSearch.Find.ClearFormatting
             rngSearch.Find.Replacement.ClearFormatting
             
             ' start searching for a character
             With rngSearch.Find
                 .Text = "(Invoice To:)(*)(^n)"
                 .Replacement.Text = "\1^13Cordis Park LLP^137 Bell Yard,\3"
                 .Forward = True
                 .Wrap = wdFindStop
                 .Format = False
                 .MatchCase = False
                 .MatchWholeWord = True
                
                 .Execute Replace:=wdReplaceAll
             End With
             
            Set rngSearch = Nothing
Добавлено через 1 час 12 минут
Такая конструкция работает.
Visual Basic
1
2
3
4
5
6
7
8
9
10
                 With rngSearch.Find
                    .ClearFormatting
                    .Replacement.ClearFormatting
                    .Text = "<Invoice To:>(*)(^n)"
                    .Replacement.Text = "\1^13" & "Cordis Park LLP" & "^13" & " 7 Bell Yard," & "^13" & "London," & "^13" & "WC2A 2JR" & "^13" & "United Kingdom" & "\3"
                    .MatchWildcards = True
                    .Execute Replace:=wdReplaceAll
                End With
                 
                Set rngSearch = Nothing
Добавлено через 3 минуты
НО! Этот код заменяет данные используя формат заголовка, т.е. "Invoice To:>"
+ самое главное: таблица с данными удаляется.

+ в регулярном выражении пришлось добавить отступ перед семёркой: "^13" & " 7 Bell Yard," а то получалось "^137 ..." и информация вставлялась с ошибками.
0
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
01.06.2020, 19:13 7
vlanatvaszla, под рукой нет word.
Вы параметр .MatchWildcards = True забыли, без него работать и не должно. Не уверен, что остальные нужны.
Там еще какая ситуация возникала - у вас в тексте на самом деле еще непечатный знак якоря стоит, это привязка таблицы. Замена вручную этот знак разумеется убирает, но таблица перепривязывается. А вот vba таблицу сносит напрочь. Надо думать, что с этим знаком делать тогда.
PS во втором варианте вы поправили, поздно увидел.

Добавлено через 3 минуты
Диалог замены позволяет заменить в том числе формат текста.
1
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
01.06.2020, 23:24  [ТС] 8
Возможно, если заменить
Visual Basic
1
.Text = "<Invoice To:>(*)(^n)"
на строку с указанием количества абзацев, то таблица не будет удаляться. Но всё равно останется проблема с форматированием.
0
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
02.06.2020, 19:45  [ТС] 9
Пока остановился на таком варианте:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
            Set rngSearch = wrdParentDoc.Content
            rngSearch.Find.ClearFormatting
            rngSearch.Find.Replacement.ClearFormatting
             
            With rngSearch.Find
                .Text = "Invoice To:"
                .Forward = True
                .Wrap = wdFindStop
                .Format = False
                .MatchCase = False
                .MatchWholeWord = True
            End With
             
            rngSearch.Find.Execute
 
            If rngSearch.Find.Found Then
                          
                wrdApp.Options.ReplaceSelection = True
          
                rngSearch.Select
 
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=1
                startPos = Selection.EndOf(Unit:=wdSentence, Extend:=wdExtend)
                Selection.TypeText Text:="Cordis Park LLP"
 
 
                
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=1
                startPos = Selection.EndOf(Unit:=wdSentence, Extend:=wdExtend)
                Selection.TypeText Text:="7 Bell Yard,"
 
 
         
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=1
                startPos = Selection.EndOf(Unit:=wdSentence, Extend:=wdExtend)
                Selection.TypeText Text:="London," & vbNewLine & "WC2A 2JR"
         
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1
                startPos = Selection.EndOf(Unit:=wdSentence, Extend:=wdExtend)
                Selection.TypeText Text:="WC2A 2JR"
                
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1
                startPos = Selection.EndOf(Unit:=wdSentence, Extend:=wdExtend)
                Selection.TypeText Text:="United Kingdom"
            End If
            
            Set rngSearch = Nothing
Из плюсов - формат текста при сохранении остаётся.
Минус один и очень большой: последние две строки перепрыгивают в правую область текста. Как узнать текущие "координаты" пока не знаю.
0
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
03.06.2020, 13:37 10
Цитата Сообщение от vlanatvaszla Посмотреть сообщение
всё равно останется проблема с форматированием.
параметры заменяемого текста тоже можно указывать:
Код
         
.Replacement.Font.Bold = False
.Replacement.Font.Italic = False
.Replacement.Font.Name = "Times New Roman"
1
Модератор
Эксперт MS Access
9827 / 3867 / 624
Регистрация: 07.08.2010
Сообщений: 10,969
Записей в блоге: 2
03.06.2020, 14:55 11
vlanatvaszla,
у вас вообще то много фокусов в документе
- в заголовке - картинка
- далее 4 колонки с разрывом колонки
- далее таблица в надписи
1
Миниатюры
Изменение текста  
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
03.06.2020, 15:36 12
shanemac51, там еще если по таблице щелкнуть, то якорь таблицы находится как раз-таки на искомом тексте, соответственно сам текст программно у меня не ищется - нужно учитывать в поисковом запросе этот самый непечатный символ. А если найти через подстановочные знаки, то при замене этот символ теряется. Даже если найти символ якоря и учесть в поисковом запросе - в разных файлах он может в разных частях надписи, или его вообще может не быть.
1
4 / 4 / 0
Регистрация: 10.09.2016
Сообщений: 254
06.06.2020, 15:56  [ТС] 13
shanemac51, к созданию документа я отношения не имею. И изменять ничего не могу.
0
627 / 126 / 33
Регистрация: 18.01.2014
Сообщений: 220
07.06.2020, 09:07 14
Цитата Сообщение от Dinoxromniy Посмотреть сообщение
в строке замены:
КодВыделить код
\1^13Новый текст^13Новый адрес^13\3
где ^13 - это знак абзаца, их проставьте по необходимости сколько нужно.
При поиске и замене с использованием подстановочных знаков в строке замены следует использовать ^p, а не ^13 иначе возможны глюки с форматированием.

Попробуйте в тексте, состоящем из нескольких абзацев, отформатированных стилем "Обычный" произвести поиск и замену с использованием подстановочных знаков.
Строка поиска ^13,
Строка замены ^13
Включаем отображение непечатаемых знаков. Внешне все выглядит как обычно.
Наблюдаем чудеса
1. Теперь можно поставить курсор сразу после знака вроде бы абзаца, что сделать с "нормальными" знаками абзаца, которые образуются после нажатия клавиши Enter. невозможно.
2. Ставим курсор внутрь любого абзаца и нажимаем стиль "Заголовок 1". Все вроде бы абзацы приобретают форматирование стиля "Заголовок 1".

Добавлено через 1 час 47 минут
Вот кусочек справки по VBA для лучшего понимания
ConstantEquivalentDescription
vbCrLfChr(13) + Chr(10)Carriage return–linefeed combination
vbCrChr(13)Carriage return character
vbLfChr(10)Linefeed character

Добавлено через 2 часа 11 минут
Попробуйте такой вариант макроса
Основная цель алгоритма - не затронуть знак абзаца, к которому привязана надпись.
На вашем документе вроде бы работает.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub Макрос1()
'
    Dim orng As Range, mystr As String
    Dim rngSearch As Range, rngdup As Range
    mystr = "aaa" & vbCrLf & "sss" & vbCrLf & "ddd" ' Строка замены
    Set orng = ActiveDocument.Shapes(1).Anchor
    Set orng = orng.Paragraphs(1).Range
    orng.End = orng.End - 1
    Set rngdup = orng.Duplicate
    rngdup.Delete 'Удаляем текст внутри абзаца, к которому привязана надпись
    
     Set rngSearch = ActiveDocument.Content
     rngSearch.Find.ClearFormatting
     rngSearch.Find.Replacement.ClearFormatting
     ' start searching for a character
     With rngSearch.Find
        .Text = "(Invoice To:)(*)(^n)"
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWildcards = True
        .Execute
     End With
    Set rngdup = rngSearch.Duplicate
    rngdup.Start = rngdup.Paragraphs(1).Range.End
    rngdup.End = rngdup.End - 4
    rngdup.Text = mystr 'Вставляем текст между "Invoice To:" и абзацем,
                        'к которому привязана надпись
    Set orng = Nothing
    Set rngSearch = Nothing
    Set rngdup = Nothing
    End Sub
0
571 / 317 / 97
Регистрация: 22.12.2015
Сообщений: 921
07.06.2020, 21:18 15
Цитата Сообщение от Борис_Р Посмотреть сообщение
При поиске и замене с использованием подстановочных знаков в строке замены следует использовать ^p, а не ^13
Борис_Р, поясните пожалуйста, каким образом это делать: у меня Word выдает окошко "сочетание ^p не может быть использовано при поиске с использованием подстановочных знаков"
0
627 / 126 / 33
Регистрация: 18.01.2014
Сообщений: 220
08.06.2020, 11:48 16
Цитата Сообщение от Dinoxromniy Посмотреть сообщение
Борис_Р, поясните пожалуйста, каким образом это делать: у меня Word выдает окошко "сочетание ^p не может быть использовано при поиске с использованием подстановочных знаков"
Dinoxromniy, а я говорю не про строку поиска, а про строку замены
В строке замены символ ^p использовать можно.

Для тех, кто хочет использовать подстановочные знаки в работе с Ворд, я рекомендую прочитать с великолепную статью:
Специальные символы и подстановочные знаки в операциях поиска и замены MS Word 97/2000/XP
Автор: С. М. Хозяинов
http://artefact.lib.ru/design/... inov.shtml

Кроме этого рекомендую познакомиться со статьями, приведенными здесь:
http://artefact.lib.ru/design/text_index.shtml

Добавлено через 11 минут
А вот обсуждение на форуме темы "Почему поиск не видит некоторые знаки конца абзаца в документе Word?"
Почему поиск не видит некоторые знаки конца абзаца в документе Word?
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2020, 11:48

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

Изменение текста в ячейке (из Фамилии Имя Отчества в Фамилию и инициалы)
Доброго времени суток! Така я вот задачка..... У меня есть много работников: Порфирьев...

Изменение шрифта текста в label в зависимости от объёма (размера) текста
Как сделать так, чтобы шрифт текста в label изменялся, в зависимости от label? : Пример того,...

Не работает изменение css и изменение текста
Не понимаю почему этот js код не работает: function load(){ var output =...

Форматирование текста и изменение цвета текста в консоли
Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет

InlineKeyboard; изменение текста, а также текста кнопки
Всем привет! Я только 5 дней назад, начал учить telebot. Я решил написать WeatherBot`а. Вообще в...

Изменение стиля текста в document.write через 10 секунд после загрузки сайта и изменяет цвет текста каждые 10 секунд
&lt;style type=&quot;text/css&quot;&gt; .st1 { color: green; * * font: 20pt Arial; * * text-align: center; }...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.