Знайомство з "Visual Studio Tools for Office"

Microsoft® "Visual Studio Tools for Office" пропонує
новий набір шаблонів проектів Visual Studio® .NET 2003,
які ви можете застосовувати для створення зборок, що працюють в рамках
процесів Microsoft Office Excel 2003 і Microsoft Office Word 2003. Це
дозволяє вам створювати документо-центричні рішення, які використовують всю
міць базових додатків (у першій версії продукту це Excel і Word). При
допомоги Microsoft Visual Basic® . NET або Microsoft Visual C #®
ви створюєте збірки, які виконуються під управлінням загальної мовної
середовища виконання. Такий код часто називають керованим кодом. Для
порівняння, існуючі програми Visual Basic for Applications (VBA)
або код на базі COM називають некерованим кодом.

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

Хоча за допомогою керованого коду можна забезпечити автоматизацію
операцій в Excel або Word, виконання цього завдання вимагає наявності
зовнішнього додатку, ззовні керуючого певним додатком Office.
Складання, створені за допомогою "Visual Studio Tools for Office", дозволяють
керованого коду взаємодіяти з базовим додатком на більш
тонкому рівні. COM-розширення можна створювати з використанням
керованого коду, проте нова архітектура "Visual Studio Tools for
Office "дозволяє розробляти рішення, які тісно інтегровані й,
що ще більш важливо, спеціально орієнтовані на використання
керованого коду.

Установка "Visual Studio Tools for Office"

Перед установкою "Visual Studio Tools for Office" слід встановити
Microsoft Office Excel 2003 і / або Microsoft Office Word 2003. Під час
установки Office не забудьте зазначити опції підтримки. NET у Word and
Excel. Це забезпечує установку відповідних основних збірок
взаємодії (PIA), необхідних для доступу до Office з Visual Studio
. NET. При повній установці Office необхідні компоненти встановлюються
автоматично. Після завершення установки "Visual Studio Tools for
Office "для розробника при наступному запуску Visual Studio. NET стануть
доступні нові типи проектів.

Рада. Основні збірки взаємодії дозволяють керованого
коду Visual Basic. NET і Visual C #. NET працювати з об'єктної COM-моделлю
базового додатки.

Порядок встановлення

Важливо дотримувати правильний порядок установки. На комп'ютері
розробника спочатку слід встановити Visual Studio. NET 2003
Professional або вище. У ході установки Visual Studio встановлюється
Microsoft. NET Framework версії 1.1. Архітектура. NET Framework повинна
бути встановлена перед Office 2003, щоб забезпечити доступ до
глобальному кешу збірок (GAC). Програма установки Office встановлює
в глобальний кеш збірки PIA для додатків Office, включаючи необхідні
PIA Word і Excel. Таким чином, при встановленні слід дотримуватися
наступного порядку:

При установці Office 2003 необхідно вибрати варіанти повної або
вибіркової установки. Якщо ви зупинитеся на вибірковій установці,
відзначте опцію. NET Programmability Support для Excel і / або Word. Крім
того, відзначте. NET Programmability Support в розділі Office Tools для
компонентів Microsoft Forms 2.0 і Microsoft Graph.

Для розгортання рішення "Visual Studio Tools for Office" на
комп'ютері кінцевого користувача ви повинні встановити наступне:

Встановити. NET Framework кінцевим користувачам можна за допомогою
Windows Update, власної служби Software Update Service вашого домену
або спеціально створеної вами програми установки.

Створення рішення "Visual Studio Tools for Office"

Створити рішення "Visual Studio Tools for Office" дуже легко. У
Visual Studio. NET 2003 виберіть опцію New Project з меню File.
Виберіть папку Microsoft Office System Projects; вкажіть керований
мова (Visual Basic або C #), а потім один із трьох можливих шаблонів:
Excel Workbook, Word Document або Word Template.

Вибравши проект, задайте для нього ім'я і шлях і натисніть ОК. Запуститься
майстер проектів Microsoft Office Project Wizard. Майстер запропонує вам на
вибір: створити новий документ або додати нову збірку до існуючого
документу. Крім того, майстер припускає, що ви захочете
модифіковані налаштування політики безпеки доступу до коду Code
Access Security (CAS) і дозволити для вашого облікового запису виконання
або налагодження нових рішень. Ви можете змінити цю установку, але в
більшості випадків краще цього не робити.

Попередження. Якщо не дати майстру змінити налаштування
політики безпеки, ви не зможете запускати або налагоджувати рішення до
тих пір, поки зміни в політику CAS не будуть внесені вручну. Майстер
видасть попередження, якщо ви знімете прапорець Update local security
policy to enable assembly to execute.

Після натискання на кнопку ОК майстер створює нове рішення Visual Studio
. NET, в якому міститься єдиний проект Class Library. Якщо ви не
хочете скористатися існуючим документом, а вирішите створити новий,
то, в якості одного з кроків процесу створення проекту майстер створює
примірник базового додатки. Проект містить два вихідних файлу:
AssemblyInfo.vb або AssemblyInfo.cs (залежно від вибраного вами
мови) і файл з класом, який відповідає документу Office,
наприклад, ThisWorkbook.vb або ThisWorkbook.cs. Крім того, в проекті
створюються посилання на необхідні бібліотеки, щоб ваш код міг
взаємодіяти з обраним базовим додатком Office. Якщо ви
додасте до свого проекту Windows Form, створюється додаткова посилання
на бібліотеку System.Drawing.dll. Природно, якщо ваш додаток того
зажадає, ви можете додати посилання на додаткові збірки.

Базова архітектура проста. При завантаженні документа Excel 2003 і Word
2003 перевіряють два його спеціальних властивості: _AssemblyLocation0 і
_AssemblyName0. Якщо ці значення знайдені, базове додаток завантажує
завантажувач збірок "Visual Studio Tools for Office" (Otkloadr.dll). Ця
некерована DLL відповідає за завантаження збірок, створених з
використанням "Visual Studio Tools for Office". Завантажувач використовує
спеціальні властивості документа, щоб знайти необхідну збірку для
документа, завантажує її в пам'ять, перевіряє деякі метадані,
встановлює посилання між базовим документом і складанням і далі не
втручається.

 

Попередження. До базового документу може бути безпосередньо
прив'язана тільки одна керована складання. Хоча ця пов'язана з
документом збірка може посилатися на будь-яку кількість інших керованих
збірок, завантажувач "Visual Studio Tools for Office" видасть повідомлення про
помилку, якщо зустріне більше одного набору властивостей, що вказують на
кілька збірок.

Якщо ви уважно подивитеся на своє перше рішення "Visual Studio
Tools for Office ", то помітите, що файл ThisWorkbook.vb містить
єдиний клас з ім'ям OfficeCodeBehind, до розгляду якого ми
звернемося нижче. Основний принцип простий: після завантаження збірки завантажувач
"Visual Studio Tools for Office" створює екземпляр класу
OfficeCodeBehind. Завантажувач використовує атрибут рівня зборки під
назвою System.ComponentModel.DescriptionAttribute, щоб знайти
стартовий клас.

Рада. Якщо ви зміните ім'я класу або простір імен
збірки, не забудьте відповідно оновити зміст атрибуту на початку
файлу класу, інакше завантажувач не зможе знайти стартовий клас.

Що ви можете робити?

Нехай це звучить банально, але ви обмежені лише власним
уявою. За допомогою "Visual Studio Tools for Office" ви можете
використовувати всю міць механізмів обчислень і створення діаграм Excel і
можливостей Word з обробки документів, а також інтегрувати
власну логіку додатків в звичний користувачеві інтерфейс.

Відгук на події

Як вже згадувалося раніше, завантажувач "Visual Studio Tools for Office"
пов'язує примірник вашого підтримує класу (code-behind) з
базовим додатком, використовуючи добре відому точку входу під
назвою _Startup. При виклику процедури їй передається два параметри.
Перший з них – це посилання за значенням на базове додаток
(Excel.Application або Word.Application), що має тип System.Object.
Другий параметр – посилання за значенням на базовий документ (Excel.Workbook
або Word.Document), яка також має тип System.Object. Обидві посилання
присвоюються змінним рівня модуля із суворим типом: ThisApplication
для базового програми та ThisWorkbook або ThisDocument для документа.

У Visual Basic обидві змінні (ThisApplication і ThisWorkbook або
ThisDocument) визначаються з використанням області дії Friend і
зарезервованого слова WithEvents. Згенерований код в _Startup
присвоює параметри за допомогою CType. Тим самим посилання на додаток і
електронну таблицю / документ зберігаються для подальшого використання,
а також прив'язуються обробники подій. У Visual C # процес протікає
аналогічно. Об'єктні змінні зберігаються як внутрішні члени класу.
Крім того, події прив'язуються вручну з використанням
делегування, оскільки C # не має функції, яка
відповідала б оператору Visual Basic WithEvents.

Незалежно від синтаксису мови кінцевий результат один і той же.
Ваш підтримує клас володіє стандартним набором готових подій.
Згодом ви легко можете додавати інші події. За замовчуванням
підтримує клас для Excel визначає процедури-заглушки для подій
Open і BeforeClose робочої книги Excel. Проекти документів Word містять
події Open і Close, а проекти шаблонів Word містять три події,
ставляться до документа: New, Open і Close. Кожен з цих об'єктів
володіє додатковими подіями, які ви можете прив'язати або в
момент розробки, або пізніше під час виконання – динамічно.
Використовуйте браузер об'єктів Visual Studio, щоб побачити, які події
доступні для певного об'єкта. Потім скористайтеся документацією
"Visual Studio Tools for Office", щоб отримати більш детальну
інформацію про події та їх роботі.

Використання панелей команд

Хоча прив'язування коду до подій базового програми або документа
може бути дуже корисним, іноді вам потрібно, щоб керований код
виконувався при натисканні користувачем кнопки на панелі інструментів. У
Office панелі інструментів називаються панелями команд і представляють
собою загальний засіб для всіх додатків. У деяких випадках ви можете
вирішити створити власну панель команд зі своїми кнопками, а в інших
випадках потрібно просто додати керуючий елемент до існуючої панелі
команд або меню. За допомогою Visual Studio Tools for Office "ви можете
зробити і те, й інше.

Додавання нового рядка меню в Excel здійснюється за кілька
простих кроків. По-перше, потрібно дати простору імен
Microsoft.Office.Core якийсь більш простий псевдонім, наприклад,
Office:

´ Visual Basic
'На початку ThisWorkbook.vb.
Imports Office = Microsoft.Office.Core

// C#
/ / На початку ThisWorkbook.cs.
using Office = Microsoft.Office.Core;

Потім вам буде потрібно три змінних рівня модуля: одна для посилання
на головну рядок меню Excel, ще одна для елемента рядка меню, і одна
для того самого пункту меню, подія Click на якому вам потрібно
обробляти.

´ Visual Basic
'У секції оголошень класу OfficeCodeBehind.
Private MainMenuBar As Office.CommandBar
Private MenuBarItem As Office.CommandBarControl
Private WithEvents MenuItem As Office.CommandBarButton

// C#
/ / У секції оголошень класу OfficeCodeBehind.
private Office.CommandBar MainMenuBar;
private Office.CommandBarControl MenuBarItem;
private Office.CommandBarButton MenuItem;

Коли змінні визначені, вам буде потрібно написати дві процедури –
одну для створення спеціального пункту рядка меню, іншу для створення
пункту меню. Приклад першої процедури наведено нижче:

´ Visual Basic
Private Sub InitMenuBarItems(ByVal Caption As String)
    Try
        Me.MainMenuBar = ThisApplication.CommandBars( _
            "Worksheet Menu Bar")
        Me.MenuBarItem = Me.MainMenuBar.Controls.Add( _
Office.MsoControlType.msoControlPopup, Temporary: = True)

        Dim cbc As Office.CommandBarControl
cbc = DirectCast (Me.MenuBarItem, Office.CommandBarControl)
        cbc.Caption = Caption
        cbc.Visible = True

    Catch ex As Exception
        MessageBox.Show(ex.Message, _
ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try
End Sub

// C#
private void InitMenuBarItems(string Caption) 
{
    try 
    {
        this.MainMenuBar = ThisApplication.CommandBars[
            "Worksheet Menu Bar"];
        this.MenuBarItem = this.MainMenuBar.Controls.Add(
Office.MsoControlType.msoControlPopup, Type.Missing, 
            Type.Missing ,Type.Missing, true);

    Office.CommandBarControl cbc = 
        (Office.CommandBarControl) this.MenuBarItem;
        cbc.Caption = Caption;
        cbc.Visible = true;
    }
    catch (Exception ex)
    {
MessageBox.Show (ex.Message, ex.Source, MessageBoxButtons.OK, 
            MessageBoxIcon.Error);
    }
}

Рада. Цей приклад демонструє одну з безлічі відмінностей
між кодом Visual Basic і кодом З # при роботі з об'єктними моделями
Office. Багато елементів об'єктних моделей Excel і Word можуть отримувати
необов'язкові параметри. Якщо Visual Basic обробляє їх так само, як
VBA, то C # не володіє такими можливостями. Для необов'язкових
параметрів, що передаються по посиланню, ви можете передати в C # об'єкт
Type.Missing. Для параметрів, що передаються за значенням, ви повинні при
виклику методів з необов'язковими параметрами з C # вказати значення за
замовчуванням.

У більшості випадків ви будете викликати цю процедуру з обробника
подій ThisWorkbook_Open, який заздалегідь визначений у вашому класі
OfficeCodeBehind. Створивши пункт рядка меню, для створення нового пункту
меню можна використовувати, наприклад наступний код:

´ Visual Basic
Private Function CreateButton( _
    ByVal Parent As Office.CommandBarPopup, _
    ByVal Caption As String) As Office.CommandBarButton

  Dim cbc As Office.CommandBarControl
    Try
        cbc = Parent.Controls.Add( _
Office.MsoControlType.msoControlButton, Temporary: = True)
        cbc.Caption = Caption
        cbc.Visible = True

  Catch ex As Exception
    MessageBox.Show(ex.Message, _
        ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)
  End Try

  Return DirectCast(cbc, Office.CommandBarButton)
End Function

// C#
private Office.CommandBarButton CreateButton(
  Office.CommandBarPopup Parent, string Caption) 
{
  Office.CommandBarControl cbc = null;
  try 
  {
    cbc = Parent.Controls.
        Add(Office.MsoControlType.msoControlButton, 
        Type.Missing, Type.Missing, Type.Missing, true);
    cbc.Caption = Caption;
    cbc.Visible = true;

  } 
  catch (Exception ex)
  {
MessageBox.Show (ex.Message, ex.Source, MessageBoxButtons.OK, 
        MessageBoxIcon.Error);
  }
  return (Office.CommandBarButton)cbc;
}

Потім ви можете викликати вищезазначені процедури з події
ThisWorkbook_Open, як показано в наступному фрагменті:

´ Visual Basic
InitMenuBarItems("&Travel Tools")
Me.MenuItem = Me.CreateButton( _
 DirectCast(Me.MenuBarItem, Office.CommandBarPopup), _
 "&Create Expense Report")

// C#
InitMenuBarItems("&Travel Tools");
this.MenuItem = this.CreateButton(
  (Office.CommandBarPopup)this.MenuBarItem, 
  "&Create Expense Report");
this.MenuItem.Click += 
  new Office._CommandBarButtonEvents_ClickEventHandler(
  MenuItem_Click);

І нарешті, додамо код, що виконується при виборі користувачем нового
пункту меню. Нижче наводиться приклад, де викликається Windows Form в
діалоговому режимі.

´ Visual Basic
Private Sub MenuItem_Click( _
 ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, _
 ByRef CancelDefault As Boolean) Handles MenuItem.Click
    Dim frm As New frmExpReport
    Select Case frm.ShowDialog
        Case DialogResult.OK
'Створити звіт.
        Case DialogResult.Cancel
'Не робити нічого.
    End Select
    frm.Close()
    frm.Dispose()
End Sub

// C#
private void MenuItem_Click(Office.CommandBarButton Ctrl, 
  ref bool CancelDefault) 
{
  frmReport frm = new frmReport();
  switch (frm.ShowDialog())
  {
    case DialogResult.OK:
/ / Створити звіт.
        break;

    case DialogResult.Cancel:
/ / Не робити нічого.
        break;
  }
  frm.Close();
  frm.Dispose();
}

Використання VBA-об'єктів в документах

Конфіденційність команд дозволяють обробляти викликаються користувачем події
без внесення змін до структури документа. Електронні таблиці Excel
і документи Word дають користувачеві (і розробнику) можливість
додавати VBA-об'єкти (наприклад, командні кнопки і поля списку) прямо в
тіло електронної таблиці або документа (див. Малюнок 1). Код може
працювати з цими керуючими елементами і реагувати на викликаються ними
події.

Малюнок 1. Об'єкт VBA розміщений в таблиці Excel.

Для роботи з керуючими елементами VBA з керованого коду ви
повинні визначити посилання на об'єкт відповідного типу. У рішенні
"Visual Studio Tools for Office" визначення цих об'єктів за замовчуванням
недоступні. Щоб використовувати їх, вам необхідно послатися на PIA для
Microsoft Forms 2.0. Ви зможете знайти PIA, скориставшись діалоговим
вікном Add Reference. Бібліотека типів Microsoft Forms 2.0 Object Library
знаходиться на вкладці СОM діалогового вікна Add Reference. Додавання
бібліотеки типів встановлює зв'язок з PIA з GAC, так що Visual Studio
. NET немає необхідності генерувати стандартну збірку взаємодії.
Встановивши посилання на бібліотеку, вам швидше за все буде потрібно додати
оператор imports / using рівня модуля, щоб створити псевдонім для
додаткових просторів імен, доступних в PIA. Наприклад, якщо ви
хочете визначити змінну командного кнопки, можна спочатку додати
наступний псевдонім, щоб уникнути введення повної посилання на простір
імен:

´ Visual Basic
Imports MSForms = Microsoft.Vbe.Interop.Forms

// C#
using MSForms = Microsoft.Vbe.Interop.Forms;

Цей псевдонім дозволяє вам використовувати таке посилання:

´ Visual Basic
Dim btn As MSForms.CommandButton
'Замість:
´ Dim btn As Microsoft.Vbe.Interop.Forms.CommandButton

// C#
MSForms.CommandButton btn;
/ / Замість:
Microsoft.Vbe.Interop.Forms.CommandButton btn;

Рада. При створенні рішень Office уникайте використання
операторів Imports або using без псевдоніма. Модуль Microsoft Forms
включає безліч інтерфейсів, що використовують ті ж імена класів, що й
керуючі елементи в просторі імен System.Windows.Forms; наприклад,
в обох бібліотеках присутні класи ComboBox і ListBox.

Розгортання

"Visual Studio Tools for Office" дозволяє вам автоматично
розгортати код разом з певним документом. Коли ви
спочатку створюєте рішення "Visual Studio Tools for Office",
розширені властивості документа вказують на скомпільовану збірку з
використанням відносного шляху, що складається з імені документа і
суфікса _bin. Наприклад, якщо ваш проект названий ExcelEvents, збірка
отримає ім'я ExcelEvents.dll і буде знаходитися в папці ExcelEvents_bin.

Рішення "Visual Studio Tools for Office" складаються з двох файлів:
файлу документа й складання. Існує три основні сценарії
розгортання, причому кожен з них передбачає, що. NET Framework 1.1
і Office 2003 уже встановлені на комп'ютері користувача. У першому
сценарії, який у багатьох випадках кращий, файл документа
розташований на локальному жорсткому диску користувача, а складання зберігається на
спільно використовуваному мережевому ресурсі, доступ до якого здійснюється
по UNC або HTTP / S. У другому сценарії обидва файли розташовуються на жорсткому
диску користувача, а в третьому вони знаходяться на мережному ресурсі. У
кожного із сценаріїв є свої плюси і мінуси.

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

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

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

Незалежно від обраного сценарію вам буде потрібно внести
зміни в локальну політику безпеки на системі користувача.
Щоб убезпечити користувачів від приєднаних до даного документу
шкідливих кодів, завантажувач "Visual Studio Tools for Office" вимагає,
щоб збірка була вказана як довірена в локальній політиці
безпеки. Коли ви спочатку створюєте рішення "Visual Studio
Tools for Office ", Visual Studio. NET вносить зміни в політику
безпеки на вашому комп'ютері, щоб забезпечити розробку і налагодження.
Від вас буде потрібно модифікувати настройки користувача з урахуванням
обраної моделі розгортання.

Безпека

Перед завантаженням будь-якого керованого коду завантажувач "Visual Studio
Tools for Office "перевіряє локальну політику безпеки, щоб
встановити, чи був збірці, на яку посилається документ, присвоєний
статус Full Trust.

Ця нова модель дуже зручна для розробників, хто
інтегрувати свої рішення з Office 2003. Код повинен явно бути визнаний
довіреною перед тим, як у нього з'явиться можливість виконання. На
комп'ютері кожного з користувачів міститься набір правил,
визначають, яким кодом дозволено виконання і що цей код може
робити.

Коли код завантажений, загальна мовне середовище виконання збирає відомості
про нього. Відомості бувають двох видів: відомості, пов'язані з хосту
(Наприклад, звідки отримано код), і відомості, пов'язані з збірці
(Наприклад, чи має вона криптографічну підпис). Відомості співвідносяться
з певною політикою. Існує чотири політики: Machine, User,
Enterprise і Host. Кожна політика може містити одну, кілька або
ні однієї кодової групи. Кодові групи на основі відомостей встановлюють
набори прав, які включають одне або більше дозволів. Дозвіл –
це право щось зробити, наприклад, право на читання файлу з диска.
Використовуючи зібрані відомості, Виконавча співвідносить збірку з
кодової групою, яка у свою чергу співвідносить її з перетином прав
для всіх чотирьох політик. Тим самим визначається, чи дозволено коду
виконання, і якщо так, то що він має право робити.

Складання, використовувані документами Word 2003 або Excel 2003, вимагають
статусу Full Trust незалежно від обраної вами моделі розгортання.
Як правило, ви повинні будете надати право на виконання
певних місць розташування зборок, а потім присвоїти статус
довіри певної збірці або набору збірок на основі суворого імені.

Що відбувається всередині

На цьому етапі ви вже повинні добре уявляти, що представляє
собою рішення "Visual Studio Tools for Office" і що ви можете зробити.
При глибшому погляді на архітектуру "Visual Studio Tools for
Office "стає очевидно, що створювані вами рішення
документо-центричний. Якщо COM-розширення забезпечують пов'язані з
базовим додатком рішення, які можуть виконуватися поверх
документів, то завдання рішення "Visual Studio Tools for Office" –
виконання спеціального коду в контексті певного документа (або
шаблону в разі Word 2003).

Коли ви починаєте створювати рішення "Visual Studio Tools for
Office ", майстер створює рішення і проект з обраним вами іменем. Нова
можливість Visual Studio. NET 2003 – це можливість давати рішенням і
папці ім'я, відмінне від імені вашого проекту. Ця функція підтримується
майстром створення нових проектів "Visual Studio Tools for Office".

При запуску майстра ви побачите групу параметрів безпеки
(Security Settings). У більшості випадків у вас не виникне
необхідності змінювати налаштування на цій сторінці майстра. Якщо ви
зніміть прапорець "Update local security policy to enable assembly to
execute ", з'явиться попередження. Проігнорувавши його, ви зробите
неможливим запуск і налагодження рішення.

Так за що ж відповідає цей маленький прапорець? Майстер не змінює
політику безпеки під час створення проекту. Замість цього він чекає,
поки ви хоча б один раз не запустіть компіляцію і налагодження проекту. Якщо
у вашому рішенні Visual Studio. NET є кілька проектів "Visual
Studio Tools for Office ", то в політику безпеки комп'ютера будуть
поміщені тільки записи кодових груп проектів, налагодження яких
виконувалася хоча б один раз. Під час компіляції "Visual Studio Tools
for Office "модифікує вашу політику користувача, включаючи нову
кодову групу під назвою Office_Projects (див. Малюнок 2).

Малюнок 2. Утіліта.NET Configuration 1.1 з кодовою групою
Office_Projects.

Для умови членства в кодової групі Office_Projects встановлено
значення All Code, а для набору прав – значення Nothing (див. Малюнок 3).
Якщо ви розкриєте кодову групу Office_Projects, то виявите розділ,
ім'я якого збігається з URL. В якості умови членства вибрано URL.
Зазначений URL являє собою шлях, звідки буде виконуватися ваша
збірка, а ім'я спеціального bin-каталогу, створеного під час компіляції,
складається з імені проекту з суфіксом _bin. Такий код дає право на
виконання всіх зборках в каталозі.

Малюнок 3. Набір прав Office_Projects.

Нарешті, в останньої дочірньої кодової групи ім'я збігається з повним
URL вашої збірки. Ця дочірня група також використовує URL в якості
умови членства. Для умови членства цієї дочірньої групи вказано
повний шлях до збірки (включаючи її ім'я). У наборі прав задано Full Trust
(Див. Малюнок 4).

Малюнок 4. Керована складання з набором прав FullTrust.

Після створення проекту ви побачите файл коду ThisDocument або
ThisWorkbook з розширенням, відповідним обраному вами мови.
Незалежно від мови чи типу проекту у вас буде один клас з ім'ям
OfficeCodeBehind. Цей клас включає методи _AssemblyLocation0 і
_AssemblyName0, Які завантажувач "Visual Studio Tools for Office" буде
шукати при завантаженні чи розвантаженні вашого коду.

За умовчанням при запуску базового програми в процес не завантажуються
ні завантажувач "Visual Studio Tools for Office", ні загальна мовне середовище
виконання. Коли користувач відкриває документ, що містить
спеціальні властивості документа, в пам'ять поміщається завантажувач "Visual
Studio Tools for Office ". Він завантажує в пам'ять середовище виконання і
виділяє домен додатки (AppDomain) за замовчуванням. Після цього середу
виконання буде вивантажено тільки при завершенні базового процесу.
Перший домен програми отримує ім'я WRDomainSetup і використовується для
встановлення всіх майбутніх доменів. Одночасно із завантаженням середовища
виконання створюється другий домен додатки. Йому присвоюється ім'я,
відповідне імені вашого документа.

Цікава особливість реалізації полягає в тому, що для властивості
домену програми SetupInfomation.ShadowCopyFiles встановлено значення
True. Збірка, завантажена за допомогою завантажувача "Visual Studio Tools for
Office "з жорсткого диска, обробляється точно також, як збірка,
отримана з віддаленого URL. Завантажувані "Visual Studio Tools for
Office "збірки копіюються в тіньовій (shadow) каталог, який є частиною
кешу завантаження збірок користувача, зареєстрованого в даний момент в
системі. Ви можете вивчити вміст кешу завантаження, зайшовши в
відповідну папку Windows за допомогою Windows Explorer. Опинившись
там, відкрийте папку Assembly і клацніть на значку "+" поруч з нею.
Відкриється підпапка під ім'ям Download.

Ви повинні побачити сукупність безлічі папок з папки Documents and
Settings з розбивкою по користувачах. Перед завантаженням збірки її копія
робиться і поміщається в кеш завантаження користувача, якщо наявна в кеші
версія старше. Ви можете перевірити походження копії, отримавши значення
властивості збірки CodeBase під час виконання вашого коду. Властивість
складання Location вкаже вам, де ця збірка знаходиться в дійсності.

Рада. Можливо, ви захочете управляти кешем завантаження. Перше, що
потрібно зробити в такому випадку – це привласнити номером версії збірки
статичне значення (цей параметр встановлюється зміною атрибуту
AssemblyVersion у файлі AssemblyInfo). За замовчуванням при кожній
компіляції та налагодженню ви будете отримувати новий номер версії. Фактично
це означає, що нова версія буде міститися в кеш завантаження без
видалення попередніх версій. Вам потрібно буде вручну видаляти старі
версії з кешу за допомогою утиліти командного рядка Gacutil.exe з
параметром / CDL. Крім того, кеш завантаження у кожного користувача свій.
Очищення вашого кешу ніяк не вплине на кеші інших користувачів того
ж комп'ютера.

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

Після завантаження збірки завантажувач "Visual Studio Tools for Office"
зчитує атрибут рівня збірки з ім'ям
System.ComponentModel.DescriptionAttribute. Опис цього атрибута
містить повністю певне ім'я типу стартового класу, а також
номер версії засобів "Visual Studio Tools for Office", за допомогою
якої був створений проект. У цій першій версії системи номер версії
ігнорується, однак він повинен бути присутнім, інакше процес завантаження
завершиться невдало. Використовуючи ім'я класу, завантажувач "Visual Studio
Tools for Office "створює екземпляр класу, зазначеного в атрибуті.

Клас OfficeCodeBehind

Незалежно від мови чи типу документа кожен проект "Visual Studio
Tools for Office "містить конструктор за умовчанням і чотири методи в
згорнутої області, поміченої Generated initialization code. Конструктор
за замовчуванням порожній і може бути вилучений, якщо він вам не потрібен. Зазначені
чотири методи – це _Startup, _Shutdown і дві перевантажені версії
FindControl. _Startup Використовується для прив'язування змінних рівня
модуля, що представляють базове додаток і документ, пов'язаний зі
складанням. _Shutdown Просто обнуляє посилання на об'єктні змінні
програми та документа, прив'язані до _Startup. Обидва цих методу
потрібні для нормального функціонування проектів "Visual Studio Tools
for Office".

Метод FindControl використовується для пошуку керуючих елементів OLE,
розташованих в поточному базовому документі. Маловідома функція Excel і
Word дозволяє поміщати елементи управління VBA прямо в тіло електронної
таблиці або документа. Це можна зробити за допомогою панелі інструментів
Control Toolbox. Відкривши цю панель, ви можете з її допомогою розміщувати
керуючі елементи в документі. На Малюнку 5 показані панель Control
Toolbox в режимі конструктора Microsoft Office Word і нова командна
кнопка в тілі поточного документа.

Малюнок 5. Control Toolbox в Word і нова командна кнопка в тілі
документа.

Використовуючи метод FindControl, ви можете знайти елемент управління,
змінювати його властивості, виконувати методи і написати код для реакції на
пов'язані з ним події (наприклад, на натискання командної кнопки). Поза
залежно від базової програми FindControl отримує у вигляді рядка
ім'я керуючого елемента, що ви хочете знайти, і при успішному
завершенні операції повертає посилання на System.Object. Ви повинні завжди
перевіряти, инициализирован чи повернутий FindControl об'єкт, оскільки
метод ігнорує будь-які винятки, що виникають при пошуку керуючого
елемента.

Перша версія FindControl передає справжню роботу другий
перевантаженої версії, яка отримує ім'я елемента в якості першого
параметра і посилання на базовий документ в якості другого. Друга версія
FindControl приймає змінну певного типу, відповідну
типу проекту, з яким ви працюєте (Word або Excel). Простіша
версія FindControl завжди передає документ або робочу книгу,
зберігається на рівні модуля в змінних ThisDocument або ThisWorkbook.
Якщо вам не подобається, що FindControl ігнорує виняткові
ситуації, ви можете модифікувати код, хоча робити це не
рекомендується, оскільки вам доведеться змінювати FindControl у всіх
проектах та інші розробники зіткнуться з несподіваним для них
поведінкою цього методу.

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

Порядок подій

На початку створення екземпляра класу OfficeCodeBehind першу
викликається конструктор за умовчанням. Хоча ви можете додавати
додаткові конструктори, в даний час відсутня спосіб,
яким завантажувач "Visual Studio Tools for Office" міг би їх виконати.
Після створення екземпляра класу виконується процедура _Startup. Важливо
відзначити, що код отримає доступ до базового додатком або документу
тільки після її виконання. Коли процедура _Startup виконана,
спрацюють вибрані вами події програми і документа. Набір
виконуваних обробників подій залежить від того, за якими подіями ви
стежте.

Коли користувач закриває документ, відбуваються додаткові
події. По-перше, спрацьовують всі події базового програми або
документа, пов'язані із закриттям документа або виходом з програми.
Після цього викликається метод _Shutdown, від'єднують код від програми
і документа. Потім виконується код обробника подій DomainUnload
домену додатки. Після цього об'єкт буде знищений в ході роботи
системи збирання сміття.

Попередження. Порядок виконання обробників подій в коді
VBA і керованому коді не детермінований. Хоча емпіричний досвід
показує, що спочатку спрацьовують обробники VBA, а потім керовані
обробники подій, немає жодної гарантії, що так буде відбуватися
завжди. Тому слід намагатися використовувати лише обробники
події лише певного типу: керовані обробники подій або обробники
подій VBA, але не обидва типи разом. Крім того, деякі події
підтримують аргументи скасування, що мають тип Boolean. Код VBA може
скасувати подія (наприклад, процес закриття робочої книги). Такі
параметри існують і в керованому обробнику подій, проте
зміна аргументу не матиме ніякого ефекту. Крім того, навіть якщо
код VBA скасує подія закриття, кероване подія BeforeClose всі
одно відбудеться, хоча клас не буде знищений. Фактично керований
обробник подій BeforeClose буде виконуватися стільки разів, скільки
буде потрібно, поки робоча книга не буде дійсно закрита!

Про просторах імен та назвах проектів

Коли ви починаєте створювати рішення "Visual Studio Tools for
Office ", ім'я проекту використовується також і як імені для кореневого
простору імен. У проектах Visual Basic це можна побачити у вікні
властивостей проекту. Всі додаткові типи, що додаються в ваш проект,
стають частиною цього простору імен.

Проекти Visual C #, з іншого боку, просто вказують простір
імен безпосередньо у вихідних файлах ThisWorkbook.cs або
ThisDocument.cs з використанням оператора namespace. У будь-якому випадку,
якщо ви вирішите змінити простір імен, в якому знаходиться клас
OfficeCodeBehind, вам необхідно буде змінити простір імен в
атрибуті рівня збирання System.ComponentModel.DescriptionAttribute. У ньому
зберігається повністю певне ім'я типу класу OfficeCodeBehind.

Ще один момент, на який слід звернути увагу – ім'я вашої
збірки. При першій налагодженні проекту визначається кодова група, яка
дозволяє виконання вашої збірки. Якщо змінити ім'я зборки, то кодова
група вашої політики безпеки оновлена не буде. Вам доведеться
настроювати кодову групу вручну. Втім, є і хороша новина:
параметр _AssemblyName0 базового документа буде змінено правильно,
проте документ просто не буде завантажуватися, поки ви не налаштуєте
політику безпеки. Якщо ви зміните ім'я складання в процесі
розробки, то вам буде потрібно видалити існуючі збірки з вихідним
ім'ям.

Спільне використання проектів "Visual Studio Tools for Office"

Роботу над проектом рідко веде одна людина. В багатьох випадках
вам буде потрібно можливість спільної роботи над проектом одночасно
з іншим розробником. Зараз ви вже розумієте, що іншим
розробникам потрібно визначити кодову групу у своїх локальних
політиках безпеки, щоб визнати довіреної вихідну інформацію
вашого проекту. Втім, є ще одна невеличка деталь, яка може
залишитися непоміченою – установка Start external program у діалоговому
вікні Project Properties при роботі з Visual Basic або Start Application
в Visual C #. Обидва ці параметра можна виявити в розділі Debugging
папки Configuration Properties у відповідних діалогових вікнах. Ви
помітите, що ці значення жорстко задані і вказують на розташування
відповідного базового програми Microsoft Office на комп'ютері, де
була розпочата робота над проектом. Якщо цей шлях не збігається точно на
вашому комп'ютері і комп'ютерах інших розробників, то вам доведеться
вручну змінювати налаштування при перенесенні проекту між ними.

Прив'язка збірки до документа

Коли ви починаєте створювати проект "Visual Studio Tools for Office",
майстер привласнює властивості Assembly Link Location значення
відносного шляху до вихідного коду проекту. Ця інформація включається
в базовий документ у вигляді спеціальних властивостей.

Рада. Якщо шлях до збірки перевищує 255 символів, то будуть
додані додаткові параметри з суфіксом, які представляють собою
збільшується числове значення (1, потім 2, потім 3 і так далі).

Крім того, властивості Office Document присвоюється значення повного
шляху до місця розташування документа. Якщо ви зміните положення базового
документа, вам буде потрібно змінити значення поля Command line arguments
діалогового вікна Project Properties в Visual Basic або поля Command Line
Arguments в Visual C #. Обидва ці параметра також можна знайти в розділі
Debugging папки Configuration Properties у відповідних діалогових
вікнах. При їх зміні необхідно змінити відповідним чином і
налаштування політики безпеки.

Висновок

За допомогою "Visual Studio Tools for Office" ви зможете створювати для
своїх користувачів закінчені документо-центричні рішення,
з'єднують міць системи Microsoft Office і архітектури. NET Framework
1.1. Використовуючи Visual Basic або Visual C #, ви зможете розробляти
додатки швидше і отримаєте більш широкий вибір варіантів
автоматичного розгортання рішень. Завдяки розвиненій моделі
безпеки, підтримуваної загальної мовним середовищем виконання, ви
зможете створювати більш безпечні рішення, які будуть виконувати
тільки той код, який ви визначите як допустимий. У той же час
користувачі будуть відчувати себе впевнено, застосовуючи добре знайомі
додатки, які допомагають їм у повсякденній роботі.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*