Работаем с MS Word из C#, часть 0, класс и тестовый проект-пример WinForms

Иллюстрация к циклу заметок про работу с Microsoft Word из C#. Проект Visual Studio 2010, два класса - WordDocument и WordSelection (просто часть документа, обертка над Range), реализующие описанные приемы, тестовый шаблон и простенькое окошко, позволяющее протестировать работу классов и наглядно увидеть, как именно все цепляется к событиям формы для самых начинающих. Если вы любите умные слова, то эти классы используют шаблон Фасад.



Тестовый проект с классами и небольшой формой для Visual Studio 2010 -- WordTest.zip

Примеры финального кода с использованием приведенных в проекте классов

Открытие шаблона

private string pathToTemplate { get { return Application.StartupPath + "\\" + pathTextBox.Text; } }
WordDocument wordDoc;
try
{
    wordDoc = new WordDocument(pathToTemplate);
}
catch (Exception error)
{
    MessageBox.Show("Ошибка при открытии шаблона Word. Подробности " + error.Message);
    return;
}
wordDoc.Visible = true;

Вставка текста на закладку

wordDoc.SetSelectionToBookmark(bookmarkTextBox.Text);

wordDoc.InsertParagraphAfter("Вставляем ПЕРВЫЙ параграф с текстом. Параметры по умолчанию.");
wordDoc.InsertParagraphAfter(); // пустой

wordDoc.InsertParagraphAfter("Вставляем ВТОРОЙ параграф с текстом. Жирный, выравнивание справа. Размер шрифта 8.");
wordDoc.Selection.Bold = true;
wordDoc.Selection.Aligment = TextAligment.Right;
wordDoc.Selection.FontSize = 8;
wordDoc.InsertParagraphAfter(); // пустой

wordDoc.InsertParagraphAfter("Вставляем ТРЕТИЙ параграф с текстом. Курсив, выравнивание по центру. Размер шрифта 18. Рамка.");
wordDoc.Selection.Italic = true;
wordDoc.Selection.Aligment = TextAligment.Center;
wordDoc.Selection.FontSize = 18;
wordDoc.Selection.Border = BorderType.Double;
wordDoc.InsertParagraphAfter(); // пустой

wordDoc.InsertParagraphAfter("Вставляем ЧЕТВЕРТЫЙ параграф с текстом. Параметры по умолчанию. Размер шрифта 12.");
wordDoc.Selection.FontSize = 12;

Внутренне устройство этих классов и теоретические принципы работы Word разобраны в дальнейших статьях этого цикла.

  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#, часть 0, класс и тестовый проект-пример WinForms — Комментарии (7)

  1. WordDocument wordDoc что это такое???? помогите. я код всталяю у меня все красным красно...

    • Все примеры кода на этой странице используют специальные классы для работы с Word, без этих классов они работать не будут.

    • Человек пришел сюда, чтобы чему-то научиться.
      Задал первый вопрос, ты его сразу же отшил.
      Петрос, если ты такой умный, то почему читаешь эти статьи?

  2. Подскажите а как после в ставки текста из поля textbox вставляемый текст записать в бд.

    Просто у меня после этого в бд записывает пустоту

  3. Добрый день.
    Большое спасибо за статью.

    Ещё бы Вы сказали, где почитать про все эти "параграфы", что это такое и с чем их едят.

    Вот сейчас вставляю программно картинки в ворд документ.
    Надо, чтобы каждая картинка на новом листе, а они друг за другом идут.

    Подскажите, можно что-либо сделать?

    for (int i = 6; i > 0; i--)
    {
    // Add a page break.
    object break_type3 = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
    para.Range.InsertBreak(ref break_type3);
    para = word_doc.Paragraphs.Add(ref missing);

    if(i == 1)
    {
    Microsoft.Office.Interop.Word.InlineShape map = word_doc.InlineShapes.AddPicture(logoFileName);
    map.Height = 200;
    map.Width = 200;
    map.Range.InsertAfter(Environment.NewLine + "Clinica: " + "Best" + Environment.NewLine +
    "Doctor: " + "Petrov" + Environment.NewLine +
    "Prof: " + "Doctor" + Environment.NewLine);
    }
    else
    {
    Microsoft.Office.Interop.Word.InlineShape map = word_doc.InlineShapes.AddPicture(imageName1);
    map.Height = 120;
    map.Width = 160;
    map.Range.InsertAfter(Environment.NewLine + "Patient Name: " + "Sidorova A. A." + Environment.NewLine +
    "Date: " + DateTime.Now.Date.ToString() + Environment.NewLine +
    "Time: " + DateTime.Now.TimeOfDay.ToString() + Environment.NewLine +
    "Picture Number " + i.ToString() + Environment.NewLine +
    "Diagnose: " + "No yet" + Environment.NewLine);
    }
    }

Добавить комментарий для Петрос Отменить ответ

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


*

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