Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/41: Рейтинг темы: голосов - 41, средняя оценка - 4.73
3 / 3 / 1
Регистрация: 19.11.2014
Сообщений: 65

Замена текста в колонтитулах Word-a

05.02.2015, 08:49. Показов 8639. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, Друзья!
Есть код который находит и заменяет текст в вордовском документе.
Но он не заменяет текст в колонтитулах. Как это сделать?
Вот код:
C#
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Windows.Forms;
 
/////Add the references (new)
//using Microsoft.Office.Interop.Word;
using System.Reflection;
using Word = Microsoft.Office.Interop.Word;
using System.IO;
////
 
namespace Reporting_Csharp_usingWORD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //Methode Find and Replace:
        private void FindAndReplace(Word.Application wordApp, object findText, object replaceWithText)
        {
            object matchCase = true; object matchWholeWord = true;
            object matchWildCards = false; object matchSoundLike = false;
            object nmatchAllForms = false; object forward = true;
            object format = false; object matchKashida = false;
            object matchDiactitics = false; object matchAlefHamza = false;
            object matchControl = false; object read_only = false;
            object visible = true; object replace = 2;
            object wrap = 1;
 
            wordApp.Selection.Find.Execute(ref findText,
            ref matchCase, ref matchWholeWord, ref matchWildCards,
            ref matchSoundLike, ref nmatchAllForms, ref forward,
            ref wrap, ref format, ref replaceWithText, ref replace,
            ref matchKashida, ref matchDiactitics, ref matchAlefHamza,
            ref matchControl);
        }
        //string pathImage = null;
        //Methode Create the document :
        private void CreateWordDocument(object filename, object savaAs)
        {
            object missing = Missing.Value;
            string tempPath = null;
            Word.Application wordApp = new Word.Application();
            Word.Document aDoc = null;
            if (File.Exists((string)filename))
            {
                DateTime today = DateTime.Now;
                object readOnly = false; //default
                object isVisible = false;
                wordApp.Visible = false;
                aDoc = wordApp.Documents.Open(ref filename, ref missing, ref readOnly,
                ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing);
                aDoc.Activate();
 
                //Find and replace:
                this.FindAndReplace(wordApp, "!НазваниеПроекта!", rtProjectName.Text);
                this.FindAndReplace(wordApp, "!ШифрПроекта!", tProjectCode.Text);
                this.FindAndReplace(wordApp, "!РП!", tStage.Text);
                this.FindAndReplace(wordApp, "!Разраб!", tRazrabotal.Text);
                this.FindAndReplace(wordApp, "!Компания!", tCompany.Text);
                this.FindAndReplace(wordApp, "!ГИП!", tGIP.Text);
                this.FindAndReplace(wordApp, "!Н.Контр!", tNKontr.Text);
                this.FindAndReplace(wordApp, "!Дата!", tDate.Text);
                tempPath = System.Windows.Forms.Application.StartupPath + "\\Images\\~Temp\\temp.jpg";
 
            }
            else
            {
                MessageBox.Show("Файл не найден!");
                return;
            }
            //Save as: filename
            aDoc.SaveAs2(ref savaAs, ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing,
                    ref missing, ref missing, ref missing);
            //Close Document:
            aDoc.Close(ref missing, ref missing, ref missing);
            File.Delete(tempPath);
            MessageBox.Show("Файл создан!");
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        //Methode Enabled Controles:
        private void tEnabled(bool state)
        {
            rtProjectName.Enabled = state;
            tProjectCode.Enabled = state;
            tStage.Enabled = state;
            tRazrabotal.Enabled = state;
            tCompany.Enabled = state;
            tGIP.Enabled = state;
            tNKontr.Enabled = state;
            tDate.Enabled = state;
        }
        //Load the Template Document:
        private void button1_Click(object sender, EventArgs e)
        {
            if (LoadDoc.ShowDialog() == DialogResult.OK)
            {
                tFilename.Text = LoadDoc.FileName;
                tEnabled(true);
                btnSubmit.Enabled = true;
            }
        }
        //Create your document:
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            if (SaveDoc.ShowDialog() == DialogResult.OK)
            {
                CreateWordDocument(tFilename.Text, SaveDoc.FileName);
                tEnabled(false);
                printDocument1.DocumentName = SaveDoc.FileName;
            }
        }
    }
}
Добавлено через 9 часов 58 минут
На одном англоязычном форуме нашел похожую тему, вроде то, что нужно.
Как можно связать этот код с кодом в первом сообщении, чтобы все работало?
Ребят, буду благодарен за помощь.
C#
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
                // Loop through all sections
                foreach (Microsoft.Office.Interop.Word.Section section in wordDocument.Sections)
                {
                     wordDocument.TrackRevisions = false;//Disable Tracking for the Field replacement operation
                                        //Get all Footers
                     Microsoft.Office.Interop.Word.HeadersFooters footers = section.Footers;
                     //Section headerfooter loop for all types enum WdHeaderFooterIndex. wdHeaderFooterEvenPages/wdHeaderFooterFirstPage/wdHeaderFooterPrimary; 
                     foreach (Microsoft.Office.Interop.Word.HeaderFooter footer in footers)
                     {
                         Fields fields = footer.Range.Fields;
                         foreach (Field field in fields)
                         {
                             if (field.Type == WdFieldType.wdFieldDate)
                             {
                                 field.Select();
                                 field.Delete();
                                 wordApplication.Selection.TypeText("[DATE]");
                             }
                             else if (field.Type == WdFieldType.wdFieldFileName)
                             {
                                 field.Select();
                                 field.Delete();
                                 wordApplication.Selection.TypeText("[FILE NAME]");
                             }
                         }
                     }
                }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2015, 08:49
Ответы с готовыми решениями:

Замена текста в закладках Word
Есть 2 ворд документа с идентичными закладками. Пытаюсь в цикле текст закладок из первого документа пихнуть в другой. Суть проблемы. При...

Замена текста в файле Word
Добрый день! Компилятор ругается на 54 строчку кода, если прописать путь напрямую то итоговый файл сохраняется, но прочитать его...

Как сделать чтобы замена текста в WORD производилась по всему документу
Сделал программу для выгрузки текста в шаблон Word с переменными. Как сделать чтобы все переменные в текте заменялись? получается что...

4
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
05.02.2015, 10:13
По-моему, я тебе советовал использовать поля, закладки и перекрёстные ссылки. Тогда не пришлось бы городить весь этот огород с поиском/заменой. Для замены вообще везде можно так поступить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void FindAndReplace(Word.Document wordDoc, object findText, object replaceWithText){
    object matchCase = true; object matchWholeWord = true;
    object matchWildCards = false; object matchSoundLike = false;
    object nmatchAllForms = false; object forward = true;
    object format = false; object matchKashida = false;
    object matchDiactitics = false; object matchAlefHamza = false;
    object matchControl = false; object read_only = false;
    object visible = true; object replace = 2;
    object wrap = 1;
    //Перебор составных частей документа
    foreach(Word.Range rng in wordDoc.StoryRanges){
        rng.Find.Execute(ref findText,
        ref matchCase, ref matchWholeWord, ref matchWildCards,
        ref matchSoundLike, ref nmatchAllForms, ref forward,
        ref wrap, ref format, ref replaceWithText, ref replace,
        ref matchKashida, ref matchDiactitics, ref matchAlefHamza,
        ref matchControl); 
    }
}
1
3 / 3 / 1
Регистрация: 19.11.2014
Сообщений: 65
05.02.2015, 11:31  [ТС]
Спасибо, то что надо. Только сейчас понял что Вы имели ввиду под перекрестными ссылками.
0
3 / 3 / 1
Регистрация: 19.11.2014
Сообщений: 65
01.04.2015, 15:05  [ТС]
ViterAlex, сегодня добавил еще пару колонтитулов с несколькими разрывами разделов, получилось так, что заменяется текст только в пределах первого колонтитула. Как подкорректировать код из сообщения, чтобы производилась замена во всем документе, включая все колонтитулы? Александр, буду очень и очень благодарен.
0
0 / 0 / 0
Регистрация: 25.02.2015
Сообщений: 45
30.12.2015, 14:37
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
foreach (Word.Range rngC in wDoc.StoryRanges)
            {
                Word.Range rng = rngC;
                while(rng!=null)
                {
                int rngc = rng.StoryLength;
                string mt = rng.Text;
                
                    rng.Find.ClearFormatting();
                    rng.Find.Execute("Version", ReplaceWith: "Version:" + PDFVersion, Replace: Word.WdReplace.wdReplaceAll);
                    rng.Find.ClearFormatting();
                    rng.Find.Execute("Data", ReplaceWith: nowTime.ToShortDateString(), Replace: Word.WdReplace.wdReplaceAll);
                    rng.Find.ClearFormatting();
                    rng.Find.Execute("Product Name", ReplaceWith: ProductName, Replace: Word.WdReplace.wdReplaceAll);
                    rng = rng.NextStoryRange;
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.12.2015, 14:37
Помогаю со студенческими работами здесь

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

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

Поиск и замена текста: все работает, кроме значений в колонтитулах
Добрый день, уважаемые форумчане. Опишу ситуацию. 1) Есть файл выгрузки из Sap он сохраняется на рабочем столе под...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru