Что представляет из себя полная автоматизация документа? Заполнение документа и всех важных полей, например фамилий, дат и названий. Разумеется, для редактирования правописания или более глубокого изменения документа надо использовать сам Word. Автоматизация части документа подходит в основном для рутинного заполнения однотипных документов, будь то всякие бланки или ведомости. Применений можно найти массу.
Первое, что может сделать стороннее приложение, это создать полностью готовый документ получая данные, непосредственно из приложения, а следовательно и из базы данных или с удалённого сервера. Рассмотрим такой случай.
Для начала изменим размер нашей единственной формы. Для этого можно потянуть за уголок в нужном направлении на странице визуального представления формы 1 . Но также размер можно менять на панели свойств этой формы. Для этого нужно поменять значение размера в пикселях (высоту и ширину) в поле Size.

c# — это просто. Работа с Word файлом через Interop.Word. Замена слов в шаблоне
ПРИМЕЧАНИЕ № 1: Для перехода на визуальное представление формы, необходимо двойным нажатием в обозревателе решений нажать на значок формы ( ) или выбрать вкладку на панели вкладок с именем . cs [Конструктор].
Задаём следующие параметры формы на панели Свойства:
| ( Name ) | изменим с Form 1. cs 2 на LWP 12 Main |
^ Поменяем внутреннее имя формы.
| Text | изменим с Form 1 на Автоматизация Microsoft Office Word ( C #) |
^ Поменяем заголовок формы (то что отображается в шапке приложения слева).
^ Необходим файл значка *. ico.
| Size | изменим со значений 300; 300 на 5 00; 315 |
^ Поменяем размер формы.

ПРИМЕЧАНИЕ № 2: Для того, чтобы поменять имя файла нашей формы, необходимо выполнить следующее: выделить в обозревателе решений значок формы ( ) и нажать правую кнопку мыши, затем выбрать Переименовать. Ввести необходимое новое имя, СОХРАНЯЯ расширение *. cs. После смены имени, автоматически поменяются имена проассоциированных непосредственно с формой файлов:

Также, разместим первую группу элементов для работы с автоматическим созданием нового документа. Получим нечто подобное:

Рис. 3. 1. Модифицированная форма приложения и расстановка первой группы элементов
Здесь у нас семь кнопок Button, один GroupBox, один OpenFileDialog и один NumericUpDown.
По порядку распишем Свойства каждого элемента:
| (Name): | B_Open |
| Text: | Открыть Word, создать документ |
| Size: | 200; 23 |
Как в Word вставить программный код с подсветкой синтаксиса? Оформляем код в ворд с Notepad++
| (Name): | B_Page_1 |
| Text: | Страница № 1 |
| Size: | 100; 23 |
| (Name): | B_Page_2 |
| Text: | Страница № 2 |
| Size: | 200; 23 |
| (Name): | GB_1 |
| Text: | Автоматическое создание и заполнение нового документа |
| (Name): | B_Scale |
| Text: | Масштаб |
| Size: | 100; 23 |
| (Name): | B_Numeric |
| Text: | Пронумеровать страницы |
| Size: | 200; 23 |
| (Name): | B_Picture |
| Text: | Вставить рисунок |
| Size: | 200; 23 |
NumericUpDow:
| (Name): | NUD_Scale |
| Text: | Increment |
| Size: | 25 |
| Minimum: | 25 |
| Maximum: | 200 |
OpenFileDialog:
| (Name): | OFD_Picture |
| Filter: | Файлы JPEG|*.jpg |
| DefaultExt: | jpg |
| FileName: | Рисунок для Word |
Также, нам необходимо добавить связь приложения и библиотеку компонентов и объектов самого Word. Для этого выполним следующее: Проект -> Добавить ссылку. В открывшемся окне выбираем COM, далее ищем Microsoft Word 14.0 Object Library (для Word 2010) и Microsoft Word 12.0 Object Library (для Word 2007):

Рис. 3. 2. Добавить ссылку: добавление библиотеки компонентов от Word 2010
В случае наличия на «машине» только Word 2007, при сборке приложения необходимо добавить библиотеку «12-ой» версии. Если же установлено две версии (2007 и 2010), то необходимо добавлять библиотеку той версии, что является активной в данный момент (при запуске не производит действий по перенастройке пакета установки).
Теперь отправляемся в код формы (правая кнопка мыши на значке формы, далее Перейти к коду или нажмём на клавишу F 7).
Источник: studopedia.net
Справочник по C#

Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок.
Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше
Работа с документами Microsoft Word, Часть 2. Создание документа на основе шаблона .dot.


В открывшемся окне, вам предложено создать новый документ, но стоит задача создать шаблон. Для этого найдите внизу окна пункт «Создать» и выберете «шаблон».

Теперь необходимо сохранить шаблон. Перейдите во вкладку «Файл» и выберете пункт «Сохранить как».

В открывшемся окне выберете директорию для сохранения, а тип файла поставьте «Шаблон Word 97-2003 (*.dot)». Данный формат позволит вам использовать шаблон как со старым офисом, версии 2003, так и с новыми версиями. Имя файла оставьте по умолчанию.

После того как вы сохранили шаблон, для добавления элементов управления содержимым необходимо отобразить вкладку «Разработчик». Перейдите «Файл»-«Параметры».

Откройте вкладку «Настройка ленты», в правой части окна, в списке «Настройка ленты» выберите пункт «Основные вкладки». Установите в списке флажок Разработчик и нажмите кнопку ОК.
После закрытия окна «Параметры Word», вы увидите дополнительную вкладку «Разработчик».

На вкладке «Разработчик» в группе «Элементы управления» нажмите кнопку «Режим конструктора».

Добавим к шаблону стандартные блоки. Стандартные блоки — это многократно используемые элементы содержимого или другие части документа, которые хранятся в коллекциях и в любое время доступны для повторного использования. Стандартные блоки также можно хранить и распространять с помощью шаблонов.
Так как мы сохранили шаблон в старом формате 97-2003, вам будут доступны только формы предыдущих версий. В группе «Элементы управления», найдите и нажмите кнопку «Инструменты из предыдущих версий». В выпадающем меню вам будет предложен ряд блоков, доступных для вашего шаблона.

Добавьте несколько блоков, например элемент управления формы – поле, флажок, надпись.

После добавления, у вас получится вот такой вариант.

Для того чтобы мы могли обращаться к этим элементам, необходимо задать каждому уникальную закладку. Для этого выберете добавленный элемент – поле, сделайте клик правой клавишей мыши по нему и выберете из контекстного меню, пункт «Свойства».

Найдите внизу окна, поле «закладка» и введите новое уникальное имя, по которому вы будете обращаться к элементу. В нашем случае для исключения ошибок с закладками на русском, введите на английской раскладке, имя: T1, т.е сокращенно текстовое поле №1. Нажмите ОК.

Сохраните и закройте шаблон. Откройте Microsoft Visual Studio. В данной инструкции будет использована версия 2010. Создайте новый проект Windows Form. Добавим пространство имен Microsoft.Office.Interop.Word, необходимое нам для работы.
Нажмите на клавиатуре клавишу F7, для перехода в листинг формы. В самом начале листинга, где объявляются пространства имен необходимые для работы проекта, добавьте еще одно:
using Word = Microsoft.Office.Interop.Word;
Далее необходимо добавить ссылку на библиотеку добавленного пространства имен, в наше решение. Для этого перейдите в «Обозреватель решений», откройте вкладку «Ссылки» и сделайте по ней клик правой клавишей мыши, в открывшемся контекстном меню, выберете пункт «Добавить ссылку…».

После открытия окна «Добавить ссылку», перейдите во вкладку «.Net» и найдите необходимый нам компонент Microsoft.Office.Interop.Word версии 12.0.0.0 и нажмите кнопку ОК.

После добавления ссылки на данную библиотеку, вы увидите ее название в обозревателе решений, в подразделе «Ссылки».

Поместите на форму два компонента, TextBox и Button:

Перейдите в конструктор формы и сделайте двойной клик по компоненту, вы перейдете в автоматически созданный метод button1_Click. Добавьте следующий код:
Класс Environment.CurrentDirectory возвращает полный путь к текущей рабочей папке, к месту в котором расположен ваш скомпилированный проект. Скопируйте ваш шаблон в папку отладки вашего проекта по умолчанию это папка Visual Studio 2010ProjectsWindowsFormsWordDotWindowsFormsWordDotbinDebug. Так же добавьте дополнительно в листинг формы два метода:
Word._Application oWord = new Word.Application(); private Word._Document GetDoc(string path) < Word._Document oDoc = oWord.Documents.Add(path); SetTemplate(oDoc); return oDoc; >private void SetTemplate(Word._Document oDoc)
Запустите приложение клавишей «F5» и введите в текстовое поле текст, который будет вставлен ив шаблон.


Дальше по такому же принципу, вы можете нарисовать таблицу и с помощью этой инструкции ее заполнить. Для примера, это может выглядеть так:

Ссылка для скачивания примера: Яндекс.Диск
Источник: csharpsourescode.blogspot.com
Создание надстройки VSTO Word для формирования шаблонов документов. Часть 1
Можно создать шаблон документа в Word, используя элементы управления содержимым (Content Control), и ограничить редактирование в нем. Но в документах бывает такое содержимое, которое необходимо добавлять или удалять. Например, добавить еще одну строку в таблицу, добавить пункт распоряжения и т.п. В таком случае будет удобнее создать собственную вкладку в Word, которая позволит изменять структуру документа при необходимости. В этой статье будет показано, как создавать Надстройку VSTO для документа Word.
Давайте рассмотрим небольшой пример программы, которая будет формировать шаблон документа. Документ выглядит следующим образом:

В Visual Studio создадим новый проект «ExampleRibbonWord» типа «Надстройка VSTO для Word 2013 и Word 2016»:

Нам необходимо создать ленту, на которой будут размещаться кнопки и выпадающие списки. Для этого щелкаем правой кнопкой мыши на названии проекта и добавляем элемент Лента (визуальный конструктор):

Вот такая лента у нас создалась:

Теперь в окне свойств элементов управления изменим названия нашей вкладки (Tab1) и группы (Group1).

Для начала давайте добавим на ленту кнопку (Button1), при нажатии на которую в документе Word будет создаваться шаблон. Свойства Label задаем= «Пример шаблона».

Теперь создадим событие Click для кнопки. Кнопка должна в документе Word сформировать указанный выше шаблон. В элементах управления содержимым мы разместим следующую информацию: дата распоряжения, номер распоряжения, название распоряжения, текст распоряжения, должность и ФИО. Пункты распоряжения мы разместим в таблице без границ.
Каждый пункт распоряжения будет также размещаться в элементе управления. При нажатии на кнопку таблица должна сформироваться с одной строкой и двумя столбцами (номер пункта, текст пункта). В дальнейшем необходимо будет реализовать функционал, который позволит добавлять новые пункты в распоряжение.
public partial class Ribbon1 < private void Ribbon1_Load(object sender, RibbonUIEventArgs e) < >//Создание текстового элемента управления //диапазон, тэг (по нему в дальнейшем можно получать содержимое), замещающий текст, когда элемент не заполнен, название private void AddContentControlText(Word.Range r, string tagRTC, string PlaceholderTextRTC, string titleRTC) < Word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument; Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); RichTextContentControl rTC = extendedDocument.Controls.AddRichTextContentControl(r, tagRTC); rTC.PlaceholderText = PlaceholderTextRTC; rTC.Tag = tagRTC; rTC.LockContentControl = true;//элемент нельзя удалить rTC.Title = titleRTC; >//Создание элемента управления даты //диапазон, тэг (по нему в дальнейшем можно получать содержимое), замещающий текст, когда элемент не заполнен, стиль даты, название private void AddContentControlDate(Word.Range r, string tagDPC, string PlaceholderTextDPC, string styleDate, string titleDPC) < Word.Document currentDocument = Globals.ThisAddIn.Application.ActiveDocument; Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); DatePickerContentControl dPC = extendedDocument.Controls.AddDatePickerContentControl(r, tagDPC); dPC.PlaceholderText = PlaceholderTextDPC; dPC.Tag = tagDPC; dPC.LockContentControl = true;//элемент нельзя удалить dPC.DateDisplayFormat = styleDate; dPC.Title = titleDPC; >//создаем собственный стиль private void CreateMyStyle(Word.Document doc) < Word.Style style = doc.Styles.Add(«MyStyleParagraph», Word.WdStyleType.wdStyleTypeParagraph); style.Font.Size = 12; style.Font.Name = «Times New Roman»; >private void button1_Click(object sender, RibbonControlEventArgs e) < //при нажатии на кнопку появится диалоговое окно, которое спросит где создать шаблон в текущем открытом word или в новом. //при этом, если текущий документ будет не пустым, то шаблон создастся в новом документе Word.Document doc; DialogResult dialogResult = MessageBox.Show(«Создать шаблон в новом документе?», «Создание шаблона», MessageBoxButtons.YesNo); if (dialogResult == DialogResult.Yes) doc = new Word.Document(); else < doc = Globals.ThisAddIn.Application.ActiveDocument; if (doc.Characters.Count >1) < MessageBox.Show(«Текущий документ не пустой! Шаблон будет создан в новом документе!»); doc = new Word.Document(); >> //создаем стиль в текущем документе CreateMyStyle(doc); //создаем абзац doc.Paragraphs.Add(); Word.Paragraph p = doc.Paragraphs.First; Word.Range r = p.Range; r.Font.Bold = 1;// шрифт жирный r.Text = «РАСПОРЯЖЕНИЕ»;//текст абзаца r.ParagraphFormat.set_Style(doc.Styles[«MyStyleParagraph»]); //стиль применяем //создаем абзац и вставляем в него 2 элемента управления //для каждого типа элемента управления создаем функцию с параметрами doc.Paragraphs.Add(); p = doc.Paragraphs.Last; r = p.Range; r.ParagraphFormat.set_Style(doc.Styles[«MyStyleParagraph»]); //дата распоряжения AddContentControlDate(r, «DateRaspr», «Дата распоряжения», «d MMMM yyyy г.», «Дата распоряжения»); r = doc.Range(p.Range.End — 1, p.Range.End — 1); r.Text = » № «; //номер распоряжения AddContentControlText(r, «NumberRaspr», «Номер распоряжения», «Номер распоряжения»); doc.Paragraphs.Add(); p = doc.Paragraphs.Last; p.SpaceAfter = 18; r = p.Range; r.ParagraphFormat.set_Style(doc.Styles[«MyStyleParagraph»]); r.Font.Bold = 1; p.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//по центру размещаем //название распоряжения AddContentControlText(r, «NameRaspr», «Название распоряжения», «Название распоряжения»); doc.Paragraphs.Add(); p = doc.Paragraphs.Last; p.SpaceAfter = 18; r = p.Range; r.ParagraphFormat.set_Style(doc.Styles[«MyStyleParagraph»]); p.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter; //текст распоряжения AddContentControlText(r, «TextRaspr», «Текст распоряжения», «Текст распоряжения»); doc.Paragraphs.Add(); p = doc.Paragraphs.Last; r = p.Range; r.ParagraphFormat.set_Style(doc.Styles[«MyStyleParagraph»]); //таблица для пунктов распоряжения Word.Table tbl = doc.Tables.Add(r, 1, 2); tbl.Columns[1].SetWidth(doc.Application.CentimetersToPoints(1), Word.WdRulerStyle.wdAdjustFirstColumn); tbl.Cell(1, 1).Range.Text = «1.»; r = doc.Range(tbl.Cell(1, 2).Range.End — 1, tbl.Cell(1, 2).Range.End — 1); AddContentControlText(r, «TextPunkt», «Пункт распоряжения», «Пункт распоряжения»); doc.Paragraphs.Add(); p = doc.Paragraphs.Last; r = p.Range; //должность AddContentControlText(r, «Dolgnost», «Должность», «Должность»); r = doc.Range(p.Range.End — 1, p.Range.End — 1); r.Paragraphs.TabStops.Add(350, Word.WdAlignmentTabAlignment.wdLeft); r.Text = «t»; r = doc.Range(p.Range.End — 1, p.Range.End — 1); //ФИО AddContentControlText(r, «FIO», «ФИО», «ФИО»); > >
Запускаем и получаем вот такой шаблон документа:

Для примера заполним дату распоряжения:


В следующих статьях мы рассмотрим пример функционала для пользователя, чтобы он мог создавать новые пункты распоряжения или удалять ненужные.
Источник: newtechaudit.ru