Как заменить текст внутри текстового поля MS-Word?

Я написал программу Windows Forms, используя C#. Он содержит текстовые поля и сетку данных.

Я хочу экспортировать данные в файл Word, чтобы использовать шаблон. Я добавил в свой код библиотеку Microsoft Word.

Также я создал текстовые поля «фигуры» внутри файла Word и поместил в них текст, который нужно найти из моей программы С#.

На данный момент все кажется в порядке, но я застрял на стороне C#, я могу заменить обычный текст, но не текст внутри текстовых полей "Внутри файла слова"

И вот мой код:

private void FindAndReplace(Word.Application wordapp, object ToFindText, object replaceWithText)

        {
            object matchCase = true;
            object matchWholeWord = true;
            object matchWildCards = false;
            object matchSoundLike = false;
            object matchAllforms = false;
            object forward = true;
            object format = false;
            object matchKashida = false;
            object matchDiactitics = false;
            object matchAlefHamza = false;
            object matchControl = false;
            object matchread_only = false;
            object visible = true;
            object replace = 2;
            object wrap = 1;

            wordapp.Selection.Find.Execute(ref ToFindText,
                ref matchCase, ref matchWholeWord,
                ref matchWildCards, ref matchSoundLike,
                ref matchAllforms, ref forward,
                ref wrap, ref format, ref replaceWithText,
                ref replace, ref matchKashida,
                ref matchDiactitics, ref matchAlefHamza,
                ref matchControl);

        }


        private void CreateWordDocument(object filename, object SaveAs)
        {
            Word.Application wordApp = new Word.Application();
            object missing = Missing.Value;
            Word.Document myWordDoc = null;

            if (File.Exists((string)filename))

            {
                object readOnly = false;
                object isVisible = false;
                wordApp.Visible = false;

                myWordDoc = 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);

                myWordDoc.Activate();

                //find and replave
                this.FindAndReplace(wordApp, "<date1>", textBox2.Text);
                this.FindAndReplace(wordApp, "<date2>", textBox3.Text);

            }

            else
            {
                MessageBox.Show("File not found!");
            }

            //Svae as
            myWordDoc.SaveAs2(ref SaveAs, 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);


            myWordDoc.Close();
            wordApp.Quit();
            MessageBox.Show("File Created!");


         }

person jason5137715    schedule 02.09.2018    source источник
comment
Вы не предоставляете достаточно информации. Какие поля? Слово имеет много, много видов. Кроме того, почему бы не использовать Bookmarks в качестве целевых данных? Или элементы управления контентом? В дополнение к этой информации вы должны показать нам базовый код, необходимый для взаимодействия с Word. Это более актуально для проблемы, чем включенный вами код WinForms... Используйте ссылку edit под вопросом, чтобы добавить дополнительную информацию. непосредственно к вопросу, пожалуйста   -  person Cindy Meister    schedule 02.09.2018
comment
Любое поле или закладка, я просто хочу, чтобы это работало, я не включал код c #, который может заполнять данные в файл слова, потому что серьезно я не понял, как это работает, я удалил все и хочу начать с нуля разбираться, надоело много примеров, у меня ничего не получается, работаю над этим с недели..   -  person jason5137715    schedule 02.09.2018
comment
@CindyMeister Я просто обновляю свой вопрос   -  person jason5137715    schedule 03.09.2018
comment
Вы работаете с файлами .doc или .docx? если это .docx, вам следует прекратить использование библиотеки взаимодействия и переключиться на OpenXML SDK Microsoft Office предоставляет команда NuGet. Он гораздо более современный и не зависит от COM, поэтому вам не нужно беспокоиться о том, что экземпляры word.exe останутся открытыми из-за неправильной очистки ресурсов.   -  person Scott Chamberlain    schedule 03.09.2018
comment
В MS-Word текстовое поле является фигурой. Таким образом, вам нужно перебрать фигуры и найти те, которые являются текстовыми полями. Затем это простая команда Shape.Range.Text для получения содержимого.   -  person Rich Michaels    schedule 03.09.2018
comment
Word имеет более одного типа текстового поля. Пожалуйста, объясните, какие команды вы использовали, чтобы поместить текстовое поле в документ. И еще, нужны ли коробки? Или только целевые точки, в которые ваш код может писать?   -  person Cindy Meister    schedule 03.09.2018
comment
@ScottChamberlain спасибо за совет, но я не знаю, как его использовать, мне потребовалась неделя, чтобы использовать обычную библиотеку слов, чтобы заставить ее работать, но я проверю ее   -  person jason5137715    schedule 03.09.2018
comment
@RichMichaels Не могли бы вы сказать мне, что я должен изменить в своем коде, чтобы он читал, что находится внутри формы?   -  person jason5137715    schedule 03.09.2018
comment
@CindyMeister Мой код просматривает текст внутри документа Word, а затем заменяет его другим текстом, он не вставляет текстовые поля, моя проблема в том, что мой код может читать только абзацы обычного текста, а не текст внутри текстового поля формы.   -  person jason5137715    schedule 03.09.2018
comment
Ваш вопрос был задан ранее. См. stackoverflow.com/questions/14256417/   -  person Cindy Meister    schedule 03.09.2018