.NET 4.x Как заполнить форму MS Word из WPF или Windows Forms? - C#

Узнай цену своей работы

Формулировка задачи:

как заполнить документ msWord через форму? Документ строится к примеру таким образом: Фамилия (данные из textBox1) Имя (данные из textBox2) Отчество (данные из textBox3)

Решение задачи: «.NET 4.x Как заполнить форму MS Word из WPF или Windows Forms?»

textual
Листинг программы
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
 
        Word._Application application; //= new Word.Application();
        Word._Document document;
 
        Object missingObj = System.Reflection.Missing.Value;
        Object trueObj = true;
        Object falseObj = false;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            WayWord();
            InsertText();
        }
 
        private void InsertText()
        {
            // обьектные строки для Word
            object strToFindObj = strToFind;   //Что это? зачем?(по возможности объяснить)
            object replaceStrObj = replaceStr;  //Что это? зачем?(по возможности объяснить)
            // диапазон документа Word
            Word.Range wordRange;
            //тип поиска и замены
            object replaceTypeObj;
            replaceTypeObj = Word.WdReplace.wdReplaceAll;
            // обходим все разделы документа
            for (int i = 1; i <= _document.Sections.Count; i++)
            {
                // берем всю секцию диапазоном
                wordRange = _document.Sections[i].Range;
 
                /*
                Обходим редкий глюк в Find, ПРИЗНАННЫЙ MICROSOFT, метод Execute на некоторых машинах вылетает с ошибкой "Заглушке переданы неправильные данные / Stub received bad data"  Подробности: [url]http://support.microsoft.com/default.aspx?scid=kb;en-us;313104[/url]
                // выполняем метод поиска и  замены обьекта диапазона ворд
                wordRange.Find.Execute(ref strToFindObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing, ref replaceStrObj, ref replaceTypeObj, ref wordMissing, ref wordMissing, ref wordMissing, ref wordMissing);
                */
 
                Word.Find wordFindObj = wordRange.Find;
                object[] wordFindParameters = new object[15] { strToFindObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, _missingObj, replaceStrObj, replaceTypeObj, _missingObj, _missingObj, _missingObj, _missingObj };
 
                wordFindObj.GetType().InvokeMember("Execute", BindingFlags.InvokeMethod, null, wordFindObj, wordFindParameters);
            }
        }
 
        private void WayWord()
        {
            //создаем обьект приложения word
            application = new Word.Application();
            // создаем путь к файлу 
            Object templatePathObj = @"C:\Users\Evgeniy\Documents\Visual Studio 2013\Projects\WindowsFormsApplication2\WindowsFormsApplication2\Договор услуги (диагностика).docx"; ;
 
            // если вылетим не этом этапе, приложение останется открытым
            try
            {
                document = application.Documents.Add(ref  templatePathObj, ref missingObj, ref missingObj, ref missingObj);
            }
            catch (Exception error)
            {
                document.Close(ref falseObj, ref  missingObj, ref missingObj);
                application.Quit(ref missingObj, ref  missingObj, ref missingObj);
                document = null;
                application = null;
                throw error;
            }
            application.Visible = true;
        }
                
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы