Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
1
RAD XE3+

Изменение текста в колонтитулах в таблице WORD

23.07.2019, 17:42. Показов 4308. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем знаю тема баян, но рыл форум и ничего не помогает ни макросы ни код на delphi. Есть колонтитул в нем таблица, в этой таблице значение которое нужно изменить. В основном документе все хорошо текст меняется. Даже если сделать активным окно колонтитулов, замена текста не происходить. Пытался использовать макросы для замены автофигур и надписей все равно не помогает. В общем надеюсь на вашу помощь, потому что сам уж точно не разберусь, если кому нужно могу дать ссылку на пример файла с колонтитулом.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2019, 17:42
Ответы с готовыми решениями:

Изменение направления текста в таблице Word
Подскажите как изменить напрвление текста в ячейке таблицы в Word при помощи vba

Замена текста в колонтитулах Word-a
Приветствую, Друзья! Есть код который находит и заменяет текст в вордовском документе. Но он не...

Автозамена текста в колонтитулах в Word
Нужен макрос, который производит автозамену текста в колонтитулах. Использую данный макрос в...

VBA Word изменение текстовых полей в шаблоне (колонтитулах)
Уважаемые профессионалы, нужна ваша помощь. Перечитал соседние ветки, перепробовал множество...

19
3759 / 2263 / 705
Регистрация: 29.05.2013
Сообщений: 9,613
23.07.2019, 18:23 2
Вы лучше код покажите, как вы ищете в колонтитулах.
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
23.07.2019, 18:39  [ТС] 3
...

Добавлено через 4 минуты
Цитата Сообщение от Пытливый Посмотреть сообщение
Вы лучше код покажите, как вы ищете в колонтитулах.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  Shape, Find: olevariant;
  i: integer;
begin
  for i:=1 to WordApp1.ActiveDocument.Shapes.Count do begin {поиск и замена в надписях}
    Shape:=WordApp1.ActiveDocument.Shapes.Item(i);
    if Shape.Type= 17 then begin
      Find:=Shape.TextFrame.TextRange.Find;
        Find.ClearFormatting;
        Find.Replacement.ClearFormatting;
        Find.Text:='что ищем';
        Find.Replacement.Text:='на что заменяем';
        Find.Forward:=True;
        Find.Wrap:=wdFindContinue;
        Find.Format:=False;
        Find.MatchCase:=False;
        Find.MatchWholeWord:=False;
        Find.MatchWildcards:=False;
        Find.MatchAllWordForms:=False;
        Find.Execute(Replace:=wdReplaceAll);
    end;
  end;
end;
0
Житель Земли
3003 / 3008 / 391
Регистрация: 26.07.2011
Сообщений: 11,464
Записей в блоге: 1
24.07.2019, 10:26 4
я провел эксперимент, и ответственно заявляю - ворду по барабану, где находится искомый текст. хоть в таблице, хоть в колонтитуле, хоть в надписи.
далее: неясна конечная цель задача, которую нужно выполнить. Предположу, что документ - это некий шаблон (к примеру, справка), который нужно заполнить текстом. в таком случае это делается просто:
в шаблоне в местах, куда нужно поставить текст, прописывается уникальная подстановочная строка, которая потом программно ищется и меняется на нужный текст.
Изменение текста в колонтитулах в таблице WORD


ну и сам макрос
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
Sub Ìàêðîñ3()
'
' Ìàêðîñ3 Ìàêðîñ
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "#SURNAME"
        .Replacement.Text = "Èâàíîâ"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "#NAME"
        .Replacement.Text = "Âàñèëèé"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "#PATR"
        .Replacement.Text = "Ïåòðîâè÷"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
все, что начинается на .Match, наверное можно выкинуть, т.к. это значения по умолчанию
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
24.07.2019, 11:10  [ТС] 5
Цитата Сообщение от DenNik Посмотреть сообщение
alse
* * End With
* * Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Вы ошибаетесь, привожу пример файла на котором это не сработало.
Нужно заменить №16 и 12.038. Ваш макрос не решает этой проблемы.
Версия Word 2016
Вложения
Тип файла: docx проверка.docx (50.9 Кб, 4 просмотров)
0
Житель Земли
3003 / 3008 / 391
Регистрация: 26.07.2011
Сообщений: 11,464
Записей в блоге: 1
24.07.2019, 11:34 6
Цитата Сообщение от Kompish Посмотреть сообщение
Ваш макрос не решает этой проблемы.
это не мой макрос. Это записанный Вордом макрос. и в приведенном тобой документе все прекрасно меняет. Две замены
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Макрос3()
'
' 
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "№16"
        .Replacement.Text = "Hello"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Добавлено через 2 минуты
все также неясна конечная цель

Добавлено через 25 секунд
Ворд 2010
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
24.07.2019, 11:49  [ТС] 7
В таблицах тоже изменился текст, где написано документ 16?можно скрин?Может дело в версии ворда? Потому что когда я пытался заменить текст с помощью поиска в ворде он не за менял его, но если ставил область поиска 'надпись в колонтитула', то он менял.
0
Житель Земли
3003 / 3008 / 391
Регистрация: 26.07.2011
Сообщений: 11,464
Записей в блоге: 1
24.07.2019, 11:59 8
Цитата Сообщение от Kompish Посмотреть сообщение
если ставил область поиска 'надпись в колонтитула'
возможно, как раз дело в версии, т.к. указанной опции в 2010 нет. но тем не менее, ищет по всему документу, невзирая на место расположения текста
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
25.07.2019, 18:03  [ТС] 9
Применил макрос, ничего не вышло.
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
25.07.2019, 22:03  [ТС] 10
Ребят тема все также актуальна, есть колонтитул в который добавлена надпись, именно в надписях меняться ничего не хочет, проверьте сами, найдется герой решивший эту проблему?
0
Модератор
9457 / 6210 / 2420
Регистрация: 21.01.2014
Сообщений: 26,471
Записей в блоге: 3
26.07.2019, 04:57 11
Цитата Сообщение от Kompish Посмотреть сообщение
есть колонтитул в который добавлена надпись
Именно надпись или таки таблица? В таблице все прекрасно меняется при использовании механизма закладок...

Добавлено через 7 минут
Да, собственно, и в надписи - тоже... Офис, если что, как раз 2016
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var W, WD: OLEVariant;
    f, nf: String;
begin
  f := 'C:\TMP\doc1.docx';
  nf := 'c:\TMP\new_doc1.docx';
  try
    W := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
  WD := W.Documents.Open(f);
  WD.Bookmarks.Item('z1').Range.Text := Edit1.Text;
  WD.Bookmarks.Item('z2').Range.Text := DateToStr(DateTimePicker1.Date);
  WD.Bookmarks.Item('z3').Range.Text := Edit2.Text;
  W.DisplayAlerts := False;
  WD.SaveAs(nf);
  W.DisplayAlerts := True;
  WD.Close;
  W.Quit;
end;
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
Житель Земли
3003 / 3008 / 391
Регистрация: 26.07.2011
Сообщений: 11,464
Записей в блоге: 1
26.07.2019, 09:12 12
Цитата Сообщение от Kompish Посмотреть сообщение
Применил макрос, ничего не вышло.
опять макрос! открой Ворд и средствами ворда (Ctrl + H) попробуй заменить текст во всем документе. если работает, значит ошибка в коде (о чем косвенно свидетельствует эксперимент D1973)
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 12:32  [ТС] 13
Цитата Сообщение от D1973 Посмотреть сообщение
Именно надпись или таки таблица? В таблице все прекрасно меняется при использовании механизма закладок...

Добавлено через 7 минут
Да, собственно, и в надписи - тоже... Офис, если что, как раз 2016
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var W, WD: OLEVariant;
    f, nf: String;
begin
  f := 'C:\TMP\doc1.docx';
  nf := 'c:\TMP\new_doc1.docx';
  try
    W := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
  WD := W.Documents.Open(f);
  WD.Bookmarks.Item('z1').Range.Text := Edit1.Text;
  WD.Bookmarks.Item('z2').Range.Text := DateToStr(DateTimePicker1.Date);
  WD.Bookmarks.Item('z3').Range.Text := Edit2.Text;
  W.DisplayAlerts := False;
  WD.SaveAs(nf);
  W.DisplayAlerts := True;
  WD.Close;
  W.Quit;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.Button1Click(Sender: TObject);
var Word: OLEVariant;
     const wdReplaceAll = 2;
begin
Word:=CreateOleObject('Word.Application');
Word.Documents.Open('C:\abc\docl.docx');
Word.Visible := True;
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := '№4327';
Word.Selection.find.execute(Replace := wdReplaceAll);
end;
Создал новый документ, повторил ничего не вышло
В основном документе надпись изменилась, а надпись которая лежит в колонтитуле -нет.
Да, с помощью CTRL+H, все заменятся, но с макросами и кодом это не работает.
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 12:37  [ТС] 14
Цитата Сообщение от DenNik Посмотреть сообщение
опять макрос! открой Ворд и средствами ворда (Ctrl + H) попробуй заменить текст во всем документе. если работает, значит ошибка в коде (о чем косвенно свидетельствует эксперимент D1973)
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.Button1Click(Sender: TObject);
var Word: OLEVariant;
     const wdReplaceAll = 2;
begin
Word:=CreateOleObject('Word.Application');
Word.Documents.Open('C:\abc\docl.docx');
Word.Visible := True;
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := '№4327';
Word.Selection.find.execute(Replace := wdReplaceAll);
end;
Попробуйте пожалуйста применить данный код у себя, если выйдет то скорее проблема с вордом.
0
Модератор
9457 / 6210 / 2420
Регистрация: 21.01.2014
Сообщений: 26,471
Записей в блоге: 3
27.07.2019, 14:55 15
Цитата Сообщение от Kompish Посмотреть сообщение
Создал новый документ, повторил ничего не вышло
Зачем было цитировать мой пост, если Вы не повторили, а сделали по своему!
Я еще раз повторюсь: делайте при помощи закладок - это работает начиная с Word 6 и до сих пор... Ну а если нет - ну дело-то хозяйское...
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 16:25  [ТС] 16
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.replaceNumSchool();
begin
Word.selection.find.Text :='№16';
Word.selection.find.replacement.Text := Edit1.Text;
Word.Selection.find.execute(Replace := wdReplaceAll);
Word.selection.Bookmarks.Item('z1').Range.Text := Edit1.Text;
Word.ActiveDocument.ActiveWindow.View.SeekView := wdSeekCurrentPageHeader;
Word.selection.Bookmarks.Item('z2').Range.Text := Edit1.Text;
Word.selection.Bookmarks.Item('z3').Range.Text := Edit1.Text;
Word.selection.start := 0;
Word.selection.end := 0;
end;
Сделал как вы сказали, но опять же закладки не видны, пишет что не существует запрашиваемый номер семейства.
Причем в основном документе все заменилось, с колонтитулом также не найдено, но я сделал его активным и теперь закладку находит, но в надписи которая находится в колонтитуле не видна. Так же решил поставить закладку в надпись в основном документе, все также не работает. Нужно как то сделать надпись активной
0
Модератор
9457 / 6210 / 2420
Регистрация: 21.01.2014
Сообщений: 26,471
Записей в блоге: 3
27.07.2019, 17:46 17
Цитата Сообщение от Kompish Посмотреть сообщение
закладки не видны
А Вы их реально в документе создали??? Прежде, чем к ним кодом обращаться?
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 17:53  [ТС] 18
Да создал, говорю же те что в основном документе изменились, в колонтитулах и надписях не находит, пока они не активны.

Добавлено через 3 минуты
Вы пробовали добавлять надпись в колонтитул? и от туда менять?
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 20:33  [ТС] 19
Цитата Сообщение от DenNik Посмотреть сообщение
возможно, как раз дело в версии, т.к. указанной опции в 2010 нет. но тем не менее, ищет по всему документу, невзирая на место расположения текста
И да вот тот фрагмент где осуществляется выбор поиска, надпись в колонтитуле, вот где мне нужно осуществить поиск
Миниатюры
Изменение текста в колонтитулах в таблице WORD  
0
0 / 0 / 0
Регистрация: 21.03.2018
Сообщений: 33
27.07.2019, 23:50  [ТС] 20
Всем большое спасибо, разобрался. Отдельно спасибо за идею D1973, нужно было слегка изменить код.
Действительно нужно было поставить закладки. Код для замены ниже.Тему можно закрыть.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.replaceNumSchool();
var
 BookmarkName, Doc, R: OleVariant;
begin
Doc := Word.ActiveDocument;
 BookmarkName := 'z2';
  if Doc.Bookmarks.Exists(BookmarkName) then
   begin
     R := Doc.Bookmarks.Item(BookmarkName).Range;
     R.InsertAfter(Edit1.Text);
  end;
end;
0
27.07.2019, 23:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2019, 23:50
Помогаю со студенческими работами здесь

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

Программный отступ в колонтитулах Word
Здравствуйте. Подскажите пожалуйста, как реализовать отступ текста в колонтитуле Dim objWord As...

Word: поиск текста в таблице
Можно ли как-то организовать поиск текста в таблице? Или для этого достаточно обычного поиска...

Нужно проставить нумерацию в колонтитулах в Word
1)Нужно проставить нумерацию в колонтитулах в Ворд. Уже пробовала разные способы, но нумерация...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru