Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

РазработкаОфисныхЗаст

.pdf
Скачиваний:
5
Добавлен:
07.02.2016
Размер:
1.18 Mб
Скачать

21

Microsoft.Office.Interop.Word.Document, містить додаткові події, а

також дозволяє додавати керовані елементи керування і смарт-теги. При створенні проекту рівня документа розробник може

звернутися до членів Microsoft.Office.Tools.Word.Document за допомогою створеного класу ThisDocument у проекті. Доступ до членів ведучого елементу Microsoft.Office.Tools.Word.Document

можна отримати за допомогою ключових слів Me або this з коду в

класі ThisDocument або за допомогою Globals.ThisDocument з коду поза класом ThisDocument. Наприклад, для вибору параграфа документа використовується код:

this.Paragraphs[1]. Range.Select ();

У проектах рівня застосування можна створювати ведучі елементи Microsoft.Office.Tools.Word.Document під час виконання.

Створений ведучий елемент можна використовувати для додавання елементів керування у пов'язаний документ.

Об'єкт діапазону Range представляє безперервну область документа і задається положеннями початкового і кінцевого символів. Немає обмеження на кількість об'єктів Range. Можна задавати декілька об'єктів Range в одному документі.

Об’єкт Range має наступні характеристики: може бути однією точкою вставки, діапазоном тексту або всім документом, може включати недруковані символи, може бути областю поточного виділення або областю за межами поточного виділення, є невидимим в документі, на відміну від виділення, яке видиме завжди, не зберігається разом з документом і існує тільки під час виконання коду, при вставці тексту в кінець діапазону Word автоматично розширює діапазон на розмір вставленого тексту.

Об'єкт Microsoft.Office.Interop.Word.ContentControl надає спосіб керування вводом і поданням тексту й вмісту інших типів у документах Word та може відображати декілька різних типів елементів користувальницького інтерфейсу, оптимізованих для використання в документах Word. Наприклад, елемент керування текстом у форматі RTF, елемент вибору дати або поле зі спіском. Даний об’єкт можна також використовувати для запобігання редагуванню користувачем розділів документа або шаблону.

Visual Studio розширює об'єкт

Microsoft.Office.Interop.Word.ContentControl, розділяючи його на декілька різних елементів керування ведучого застосування. Оскільки

22

об'єкт Microsoft.Office.Interop.Word.ContentControl здатний відображати будь-який тип елементів користувальницького інтерфейсу, доступних для елементів керування вмістом, Visual Studio надає окремий клас для кожного типу таких елементів керування вмістом. Так за допомогою об'єкта

Microsoft.Office.Tools.Word.RichTextContentControl можна створити елемент керування текстом у форматі RTF, а за допомогою об'єкта

Microsoft.Office.Tools.Word.DatePickerContentControl — елемент вибору дати. Поведінка цих елементів керування ведучого застосування аналогічна поведінці власних елементів керування

Microsoft.Office.Interop.Word.ContentControl, однак вони мають додаткові події і прив'язки до даних.

Об'єкт закладки Microsoft.Office.Interop.Word.Bookmark

представляє безперервну область документа з початковою і кінцевою позиціями. Закладки можна використовувати для позначення якогось розташування в документі або як контейнер для тексту в документі. Даний об’єкт має наступні характеристики, що відрізняють його від об'єкта Range:

імена закладкам можна давати під час розробки;

закладки зберігаються з документом, тобто вони не видаляються при зупинці виконання коду або при закритті документа.

дані можна приховувати або робити видимими, встановлюючи для властивості ShowBookmarks об'єкта View відповідне значення false або true.

1.2.5 Розробка консольного застосування, яке виконує автоматизацію Word

Для створення консольного застосування, яке виконує автоматизацію Word, загалом необхідно виконати наступну послідовність кроків:

а) у меню Файл Visual Studio послідовно виберіть пункти Создать та Проект;

б) у панелі шаблонів розверніть вузол Visual C#, оберіть вузол Windows та зі списку шаблонів проекту оберіть Консольное приложение, після чого натисніть кнопку ОК;

в) у браузері рішень натисніть правою кнопкою миші на вузлі

23

Ссылки та виберіть пункт меню Добавить ссылку…

г) у вікні, що відкриється, виберіть вкладку.NET та файл

Microsoft.Office.Intertop.Word.dll.

Приклад тексту файлу Program.cs:

using Word = Microsoft.Office.Interop.Word; namespace AutomationWordConsoleApplication {class Program

{static void Main(string[] args)

{Word.Application word = new Word.Application(); Word.Document document = word.Documents.Add(); Word.Range range = document.Range();

range.Text = "Hello, World!"; word.Visible = true;

}

}

}

1.2.6 Розробка налаштування рівня документа для Word

Для того щоб створити новий проект документа Word у Visual Studio:

Виберіть Файл → Создать → Проект;

У панелі шаблонів розгорніть вузол Visual C#, а потім –

Office;

У розгорнутому вузлі Office виберіть версію Word;

У списку шаблонів проекту виберіть Документ Word (2007, 2010 або 2013 відповідно);

Виберіть Создать новый документ.

Після виконання наведених дій Visual Studio створює проект

FirstDocumentCustomization і додає документ

FirstDocumentCustomization і файл коду ThisDocument у проект.

Документ FirstDocumentCustomization відкривається в конструкторі автоматично.

Можна розробити користувальницький інтерфейс налаштування, змінивши документ, відкритий у конструкторі. Наприклад, можна додати текст, таблиці або елементи керування

Word.

24

У документі, відкритому в конструкторі, для прикладу введіть:

Цей текст доданий за допомогою конструктора.

Для додавання другого абзацу тексту в документ програмними засобами необхідно виконати наступну послідовність дій:

у браузері рішень натисніть правою кнопкою миші на файл ThisDocument, а потім виберіть Смотреть код;

замініть обробник подій ThisDocument_Startup наступним

кодом:

private void ThisDocument_Startup(object sender, System.EventArgs e)

{this.Paragraphs[1].Range.InsertParagraphAfter(); this.Paragraphs[2].Range.Text = "Цей текст доданий за

допомогою коду.";

}

За замовчуванням файл коду ThisDocument містить часткове визначення класу ThisDocument, що представляє модель програмування документа і надає доступ до моделі об'єкта Word, та обробники подій ThisDocument_Startup і ThisDocument_Shutdown, що викликаються при відкритті та закритті документа.

1.2.7 Розробка надбудови рівня застосування Word

Для створення нового проекту надбудови Word в Visual Studio необхідно виконати дії, аналогічні налаштуванню рівня документа, обравши при цьому у списку шаблонів проекту Надстройка Word.

За замовчуванням файл коду ThisAddIn містить часткове визначення класу ThisAddIn та обробники подій ThisAddIn_Startup і

ThisAddIn_Shutdown.

Для прикладу у файлі коду ThisAddIn додайте в клас ThisAddIn наступний код:

void Application_DocumentBeforeSave(Word.Document Doc, ref bool SaveAsUI, ref bool Cancel)

{Doc.Paragraphs[1].Range.InsertParagraphBefore(); Doc.Paragraphs[1].Range.Text = "Цей текст доданий за

допомогою коду.";}

25

Параметр Doc є об'єктом Microsoft.Office.Interop.Word. Document, що представляє збережений документ.

А в обробник подій ThisAddIn_Startup необхідно додати наступний код, що використовується для підключення до обробника

подій Application_DocumentBeforeSave події DocumentBeforeSave:

this.Application.DocumentBeforeSave += new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler (Application_DocumentBeforeSave);

1.2.8 Об’єктна модель Excel

Об'єктна модель Excel точно відповідає інтерфейсу користувача. Об'єкт Application представляє застосування в цілому, і кожен з об'єктів Workbook містить колекцію об'єктів Worksheet. Звідси випливає, що основна абстракція, що представляє комірки, є об'єктом Range, що дозволяє працювати з окремими комірками або групою комірок.

При створенні нового проекту рівня застосування для Excel середовище Visual Studio автоматично створює файл коду ThisAddIn.cs. Доступ до об'єкту застосування можна отримати за допомогою властивості Me.Application або this.Application.

При створенні нового проекту рівня документа для Excel можна створити новий проект книги Excel або шаблону Excel. Середовище Visual Studio автоматично створює наступні файли коду в новому проекті Excel як для проектів книги, так і для проектів шаблону:

ThisWorkbook.cs, Sheet1.cs, Sheet2.cs, Sheet3.cs.

Клас Globals у проекті можна використовувати для отримання доступу до об'єкта ThisWorkbook, Sheet1, Sheet2 або Sheet3 поза відповідним класом.

Оскільки дані в документі Excel добре структуровані, модель об'єкта ієрархічна й пряма. До числа основних об'єктів відносяться:

а) застосування (Application): представляє безліч відомостей про виконувані додатки, параметри цього екземпляра і поточні об'єкти користувача, відкриті в екземплярі;

б) книга: об'єкт Microsoft.Office.Interop.Excel.Workbook

представляє одну книгу в Excel;

в) аркуш: об'єкт Microsoft.Office.Interop.Excel.Worksheet є

26

членом колекції Worksheets. Excel надає колекцію Sheets як властивість об'єкта Microsoft.Office.Interop.Excel.Workbook;

г) діапазон (об'єкт Microsoft.Office.Interop.Excel.Range)

представляє комірку, рядок, стовпець і набір комірок, що містить один або декілька блоків комірок (які можуть бути суміжними або несуміжними) або групу комірок на декількох аркушах.

1.2.9 Розробка консольного застосування, яке виконує автоматизацію Excel

Консольне застосування, яке виконує автоматизацію Excel, розробляється аналогічно засобам, розглянутим для Word. При цьому необхідно підключити збірку Microsoft.Office.Interop.Excel.dll.

Для прикладу відредагуйте текст файлу Program.cs наступним чином:

using Excel = Microsoft.Office.Interop.Excel; namespace AutomationExcelConsoleApplication

{class Program

{static void Main(string[] args)

{Excel.Application application = new Excel.Application();

Excel.Workbook workbook = application.Workbooks.Add();

Excel.Worksheet worksheet = workbook.Worksheets.Add();

Excel.Range range = worksheet.Range["A1"]; range.Value2 = "Hello, World!"; application.Visible = true;

}

}

}

1.2.10 Розробка налаштування рівня документа для Excel

Розробка налаштування рівня документа для Excel виконується аналогічно відповідним діям для Word. При цьому у списку шаблонів проекту необхідно вибрати варіант Книга Excel.

Можна розробити користувальницький інтерфейс

27

налаштування, змінивши робочий аркуш, відкритий в конструкторі. Наприклад, можна додати текст у комірку, застосувати формули або додати елементи керування Excel.

Для прикладу у відкритому в конструкторі робочому аркуші виберіть комірку A1 і введіть наступний текст: “ Цей текст доданий за допомогою конструктора”, потім замініть обробник подій

Sheet1_Startup наступним кодом:

private void Sheet1_Startup(object sender, System.EventArgs e)

{Microsoft.Office.Tools.Excel.NamedRange nr = this.Controls.AddNamedRange(this.Range["A2", missing],

"NamedRange1");

nr.Value2 = "Цей текст доданий за допомогою коду.";

}

1.2.11 Розробка надбудови рівня застосування Excel

Розробка надбудови рівня застосування Excel виконується аналогічно відповідним діям для Word. При цьому у списку шаблонів проекту необхідно вибрати варіант Надстройка Excel.

Для прикладу у файлі коду ThisAddIn додайте в клас ThisAddIn наступний код:

void Application_WorkbookBeforeSave (Microsoft.Office.Interop.Excel.Workbook Wb, bool SaveAsUI, ref bool Cancel)

{ Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);

Excel.Range firstRow = activeWorksheet.get_Range("A1", missing);

firstRow.EntireRow.Insert(Excel.XlInsertShiftDirection. xlShiftDown, System.Type.Missing);

Excel.Range newFirstRow = activeWorksheet.get_Range("A1", missing);

newFirstRow.Value2 = "Цей текст доданий за допомогою коду.";

}

28

В обробник подій ThisAddIn_Startup необхідно додати наступний код:

this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveE ventHandler(Application_WorkbookBeforeSave);

1.2.12 Розширення документів Word та книг Excel у надбудовах рівня застосування під час виконання

Можна використовувати надбудову рівня застосування для виконання зазначених нижче налаштувань документів Word і книг

Excel:

додавання керованих елементів керування в будь-який відкритий документ або аркуш;

створення смарт-тегів, які розпізнають терміни в зазначеному документі або книзі;

перетворення існуючого об'єкта списку на аркуші Excel у розширений об'єкт ListObject, який надає події і дозволяє виконати прив'язку даних за допомогою моделі прив'язки даних Windows

Forms;

— отримання доступу до подій на рівні додатку, які надаються Word і Excel для певних документів, книг і аркушів.

Для використання цих функціональних можливостей необхідно під час виконання створити об'єкт, що розширює документ або книгу.

1.2.12.1 Створення розширених об'єктів у надбудові

Розширені об'єкти є типами, що надаються середовищем виконання Visual Studio Tools for Office. Вони додають функціональні можливості об'єктам, існуючим всередині об'єктних моделей Word або Excel (власні об'єкти Office). Щоб створити розширений об'єкт для об'єкта Word або Excel, використовуйте метод GetVstoObject. При першому виклику методу GetVstoObject для заданого об'єкта Word або Excel він повертає об'єкт, що розширює заданий об'єкт.

Тип розширеного об'єкта має таке ж ім’я, як тип власного об'єкта Office, але цей тип визначений у просторі імен

Microsoft.Office.Tools.Excel або Microsoft.Office.Tools.Word.

29

Наприклад, якщо викликати метод GetVstoObject для розширення об'єкта Microsoft.Office.Interop.Word.Document, метод повертає об'єкт

Microsoft.Office.Tools.Word.Document.

Спосіб доступу до GetVstoObject залежить від версії, на яку орієнтований проект .NET Framework.

У проектах, орієнтованих на .NET Framework 3.5, використовуйте метод GetVstoObject екземплярів одного з наступних типів в основних збірках взаємодії Excel і Word:

Microsoft.Office.Interop.Excel. ListObject, Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.

Interop.Excel.Worksheet, Microsoft.Office.Interop.Word.Document.

У проектах, орієнтованих на .NET Framework 4, використовуйте метод Globals.Factory.GetVstoObject і передайте власний об'єкт Word або Excel (наприклад, Microsoft.Office.Interop.Word.Document або Microsoft.Office.Interop.Excel.Worksheet), який необхідно розширити.

Методи GetVstoObject призначені для використання переважно в проектах рівня застосування. Крім того, можна використовувати ці методи в проектах рівня документа, але тоді поведінка об'єктів дещо відрізняється і має менше число застосувань.

Щоб визначити, чи вже створений розширений об'єкт для певного власного об'єкта Office, скористайтеся методом

HasVstoObject.

1.2.12.2 Створення ведучих елементів

При використанні методу GetVstoObject для розширення об'єкта рівня документа (Microsoft.Office.Interop.Excel.Workbook, Microsoft.

Office.Interop.Excel.Worksheet або Microsoft.Office.Interop.Word. Document) об'єкт, що повертається, називається ведучим елементом.

Ведучий елемент — це тип, який може містити інші об'єкти, що включають у свою чергу інші розширені об'єкти і елементи керування. Ведучий елемент схожий на відповідний тип в основний збірці взаємодії Word або Excel, але володіє додатковими функціональними можливостями.

Після того, як ведучий елемент створений, його можна використовувати для додавання смарт-тегів або керованих елементів керування в документ, книгу або аркуш.

У наступному прикладі коду показано створення ведучого

30

елементу для активного документа в проекті Word, орієнтованого на

.NET Framework 4:

if (Globals.ThisAddIn.Application.Documents.Count> 0)

{ Microsoft.Office.Interop.Word.Document nativeDocument = Globals.ThisAddIn.Application.ActiveDocument;

Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject (nativeDocument);

}

Для активної книги в проекті Excel відповідний код буде виглядати наступним чином:

Microsoft.Office.Interop.Excel.Workbook nativeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook;

if (nativeWorkbook!= null)

{ Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = Globals.Factory.GetVstoObject (nativeWorkbook);

}

Створення ведучого елементу для активного аркуша Excel:

Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet = Globals.ThisAddIn.Application.ActiveSheet;

if (nativeWorksheet!= null)

{ Microsoft.Office.Tools.Excel.Worksheet vstoSheet = Globals.Factory.GetVstoObject (nativeWorksheet);

}

1.2.12.3 Створення елементів керування ведучої програми

ListObject

При використанні методу GetVstoObject для розширення об'єкта

Microsoft.Office.Interop.Excel.ListObject метод повертає об'єкт Microsoft.Office.Tools.Excel.ListObject.

Об'єкт Microsoft.Office.Tools.Excel.ListObject володіє всіма функціональними можливостями вихідного об'єкта Microsoft.Office. Interop.Excel.ListObject, але він також має додаткові функціональні можливості: наприклад, можливість зв'язування з даними з