Работаем с MS Word из C#, часть 2. Вставляем текст на закладку и форматируем

Продолжение былинной саги про Office.Interop.Word. Самый простой способ вставить кусок текста в нужную часть Word-шаблона - использовать закладки. В отличие от текстовых меток закладки не надо искать, они невидимы и всегда имеют уникальное имя. Имея открытый в предыдущей части документ Word мы можем с легкостью получить диапазон-Range для закладки (bookmark).

Word.Range bookmarkRange = _document.Bookmarks.get_Item(ref bookmarkNameObj).Range;

Кроме банальной вставки текста хотелось бы его немного поформатировать - жирный/курсив, размер текста, выравнивание абзаца. Все это доступно через интерфейс Range.

Полужирное начертание через Range.Bold и курсив через Range.Italic. Надо заметить что вместо напрашивающегося bool эти свойства имеют тип int

_range.Bold = 1; 
_range.Italic = 1; 

Выравнивание текста задается через перечисление WdParagraphAlignment и свойство ParagraphFormat.Alignment

_range.ParagraphFormat.Alignment == Word.WdParagraphAlignment.wdAlignParagraphLeft

Надо заметить, что при вставке текста в диапазон текущее выравнивание заменяется выравниванием по центру, так что его лучше сохранять и восстанавливать.

Размер шрифта через свойство Size интерфейса Font. Оно имеет редкий тип float, хотя в реальности размер шрифта задается целым числом.

_range.Font.Size = 11;

И напоследок рассмотрим вставку более объемного текста - нескольких абзацев подряд. Алгоритм достаточно прост, вставляем абзац, заполняем и форматируем, вставляем следующий. Используем метод Range.Collapse и перечисление CollapseDirection

Object collapseDirection = Word.WdCollapseDirection.wdCollapseEnd;
_currentRange.Collapse(ref collapseDirection);
_currentRange.InsertParagraphAfter();

Надо учитывать, что при заполнении вставленного таким образом абзаца текстом он сольется с предыдущим абзацом. Чтобы избежать этого надо при вставке текста добавлять к нему символ конца абзаца методом InsertParagraphAfter. Это не надо делать в случае вставки текста на текстовую метку, закладку или ячейку таблицы.

_range.InsertParagraphAfter();

Еще одно свойство диапазона используется в основном при работе с таблицами - речь идет о границах (например ячейки в таблице) задаваемых через перечисление WdLineStyle и интерфейс Borders (для таблицы в целом такой метод не работает). В принципе границы можно задавать для любого куска документа.

_range.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleNone; 
  1. Работаем с MS Word из C#, часть 0, класс и тестовый проект-пример WinForms
  2. Работаем с MS Word из C#, часть 1. Открываем шаблон, ищем текст внутри документа
  3. Работаем с MS Word из C#, часть 2. Вставляем текст на закладку и форматируем
  4. Работаем с MS Word из C#, часть 3. Работа с таблицами
  5. Работаем с MS Word из C#, часть 4. Обьединяем несколько файлов в один, считаем количество страниц
  6. Microsoft.Office.Interop.Word Namespace
  7. Range Interface

Комментарии

Работаем с MS Word из C#, часть 2. Вставляем текст на закладку и форматируем — 1 комментарий

  1. Привет. Статьи очень мне помогли. Но вопрос есть к Вам. Как мне добавить Текущую дату, если на Закладке я добавил Контрол для вставки Даты через Sleector Date в Word?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>