Работа с документами Microsoft Word, Часть 1. Программное создание документа: Справочник по C#

Опубликовано: 23.08.2018

видео Работа с документами Microsoft Word,  Часть 1. Программное создание документа: Справочник по C#

Занятие 3. Оформление текстовых документов в Microsoft Word 2010. Часть 1
      Большинству операций, выполняемых программным способом, есть эквиваленты в пользовательском интерфейсе (UI), доступные как команды в меню и на панелях инструментов. Также существует нижележащая архитектура, обеспечивающая поддержку команд, выбираемых из UI. Всякий раз, когда вы создаете новый документ Word, он базируется на каком-либо шаблоне; расширение файлов шаблонов « .dot », а файлы документов – « .doc ». Шаблон Word может содержать текст, код, стили, панели инструментов, элементы автотекста, комбинации клавиш для быстрого доступа к командам. Новый документ связывается с шаблоном и получает полный доступ к его элементам. Если вы не указываете конкретный шаблон, новый документ создается на основе стандартного шаблона « Normal.dot », который устанавливается при установке Word).



      Шаблон Normal.dot является глобальным, он доступен любому документу, который вы создаете. Вы могли бы при желании поместить весь свой код в Normal.dot и создавать все документы в своей среде на основе собственного шаблона Normal (Обычный). Но тогда его файл мог бы стать чрезмерно большим, поэтому более эффективное решение для многих разработчиков - создание собственных шаблонов для конкретных приложений. В документах, создаваемых на основе вашего шаблона, код из стандартного шаблона Normal по-прежнему будет доступен. При необходимости можно связывать документ с несколькими шаблонами в дополнение к шаблону Normal.


Режимы работы с документами Word

      Для работы с приложением Microsoft Word в .NE T, используется объект Application , который является предком всех остальных объектов. Получив на него ссылку, вы можете работать с его методами и свойствами. Этот объект предоставляет большой набор методов и свойств, позволяющих программным путем управлять Microsoft Word . Код инициализации нового объекта Application , представлен ниже.

Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application(); Чтобы открыть существующий документ или создать новый, необходимо создать новый объект Document .

object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);       Выполняя какую-либо операцию в пользовательском интерфейсе Word (например, добавляя верхний колонтитул), вы выделяете соответствующую секцию, используя объект « Selection », определяющий текущую позицию « невидимого » курсора и применяете к ней новый параметр форматирования с использованием объекта « Range ». Данный объект представляет область в документе и может включать в себя все что угодно - от пары символов, до таблиц, закладок и много другого. Вы не ограничены одним объектом « Range » - в одном документе можно определить сразу несколько таких объектов.

//Добавление верхнего колонтитула foreach (Microsoft.Office.Interop.Word.Section section in document.Sections) { Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage); headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue; headerRange.Font.Size = 10; headerRange.Text = "Верхний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление нижнего колонтитула foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections) { Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed; footerRange.Font.Size = 10; footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; footerRange.Text = "Нижний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } Чтобы добавить текст в документ, необходимо указать позицию для вставки и сам текст.

//Добавление текста в документ document.Content.SetRange(0, 0); document.Content.Text = "www.CSharpCoderR.com" + Environment.NewLine; Так же вы можете применить к тексту определенный стиль.

//Добавление текста со стилем Заголовок 1 Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing); object styleHeading1 = "Заголовок 1"; para1.Range.set_Style(styleHeading1); para1.Range.Text = "Исходники по языку программирования CSharp"; para1.Range.InsertParagraphAfter();       В классе Microsoft.Office.Interop.Word.Document , присутствует коллекция « Tables », которая позволяет добавить таблицу в документ с использованием метода Add .

//Создание таблицы 5х5 Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing); firstTable.Borders.Enable = 1; foreach (Row row in firstTable.Rows) { foreach (Cell cell in row.Cells) { //Заголовок таблицы if (cell.RowIndex == 1) { cell.Range.Text = "Колонка " + cell.ColumnIndex.ToString(); cell.Range.Font.Bold = 1; //Задаем шрифт и размер текста cell.Range.Font.Name = "verdana"; cell.Range.Font.Size = 10; cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25; //Выравнивание текста в заголовках столбцов по центру cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; } //Значения ячеек else { cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString(); } } }        Для функционирования описанного выше кода, необходимо добавить к текущему проекту объектную библиотеку MS Word. Перейдите в меню « Проект » и выберете команду « Добавить ссылку » или в обозревателе решений, найдите пункт « Ссылки » и сделайте клик правой клавишей мыши по нему, из появившегося контекстного меню выберете соответствующий пункт.

      В открывшемся окне «Добавить ссылку», перейдите на вкладку « COM » и выберете « Microsoft Word 14.0 Object Library » из предложенного списка библиотек.

В обозревателе решений у вас появится ссылка на данную библиотеку.

      Перейдите в конструктор главной формы и добавьте из панели элементов, командную кнопку « Button ». Данный элемент необходим для запуска процесса создания документа и вызов MS Word для отображения.

      Сделайте двойной клик левой клавишей мыши по элементу « Button » и вы перейдете в автоматически созданный метод события « button1_Click ». Добавьте в него приведенный ниже код. try { Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application(); winword.Visible = false; //Заголовок документа winword.Documents.Application.Caption = "www.CSharpCoderR.com"; object missing = System.Reflection.Missing.Value; //Создание нового документа Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing); //добавление новой страницы //winword.Selection.InsertNewPage(); //Добавление верхнего колонтитула foreach (Microsoft.Office.Interop.Word.Section section in document.Sections) { Microsoft.Office.Interop.Word.Range headerRange = section.Headers[ Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; headerRange.Fields.Add( headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage); headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue; headerRange.Font.Size = 10; headerRange.Text = "Верхний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление нижнего колонтитула foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections) { // Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; //Установка цвета текста footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed; //Размер footerRange.Font.Size = 10; //Установка расположения по центру footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; //Установка текста для вывода в нижнем колонтитуле footerRange.Text = "Нижний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление текста в документ document.Content.SetRange(0, 0); document.Content.Text = "www.CSharpCoderR.com" + Environment.NewLine; //Добавление текста со стилем Заголовок 1 Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing); object styleHeading1 = "Заголовок 1"; para1.Range.set_Style(styleHeading1); para1.Range.Text = "Исходники по языку программирования CSharp"; para1.Range.InsertParagraphAfter(); //Создание таблицы 5х5 Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing); firstTable.Borders.Enable = 1; foreach (Row row in firstTable.Rows) { foreach (Cell cell in row.Cells) { //Заголовок таблицы if (cell.RowIndex == 1) { cell.Range.Text = "Колонка " + cell.ColumnIndex.ToString(); cell.Range.Font.Bold = 1; //Задаем шрифт и размер текста cell.Range.Font.Name = "verdana"; cell.Range.Font.Size = 10; cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25; //Выравнивание текста в заголовках столбцов по центру cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; } //Значения ячеек else { cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString(); } } } winword.Visible = true; } catch (Exception ex) { MessageBox.Show(ex.Message); }       Запустите ваш проект, нажав на клавиатуре, клавишу « F5 ». Нажмите на единственную кнопку, расположенную на главной форме вашего проекта. У вас автоматически откроется документ Microsoft Word с заполненным верхним и нижним колонтитулом, обычным и с применением стиля текстом, а так же заполненной таблицей.

      Для сохранения документа в определенной директории, добавьте приведенный ниже код, после строки «winword.Visible = true;».

//Сохранение документа object filename = @"d:\temp1.docx"; document.SaveAs(ref filename); //Закрытие текущего документа document.Close(ref missing, ref missing, ref missing); document = null; //Закрытие приложения Word winword.Quit(ref missing, ref missing, ref missing); winword = null;

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

yandex