Зв’язування за допомогою Visual C #. NET для автоматизації додатків Microsoft Office (исходники), Різне, Програмування, статті

Анотація


При автоматизації таких додатків, як додатки Microsoft Office, виклики властивостей і методів об’єктів додатків Microsoft Office повинні бути певним чином зіставлені цих об’єктів. Процес зіставлення викликів властивостей і методів об’єктів, які реалізують ці властивості і методи, називається зв’язуванням. В Visual C # існують два типи зв’язування: раннє зв’язування і пізніше зв’язування. Вибір типу зв’язування впливає на такі характеристики програми, як продуктивність, гнучкість і зручність супроводу.

У даній статті розглядаються і порівнюються раннє і пізнє скріплення в клієнтах автоматизації, написаних на Visual C #, і наводяться приклади обох типів зв’язування.

Раннє зв’язування

За допомогою раннього зв’язування Visual C # здійснює прив’язку безпосередньо до відповідних методам і властивостям, використовуючи відомості про типи для цього додатка Microsoft Office. При цьому компілятор може перевірити синтаксис і відповідність типів, правильність вказівки числа і типу параметрів, переданих методу або властивості, і тип значення, що повертається. Оскільки при виконанні програми раннє зв’язування вимагає менше часу для виклику властивостей або методів, воно може працювати швидше, ніж пізніше. Проте різниця в продуктивності, як правило, незначна.

Раннє зв’язування має недолік, який може викликати проблеми сумісності версій. Припустимо, що в сервері автоматизації (наприклад, в Microsoft Excel 2002) реалізовані новий метод або властивість, недоступні в Microsoft Excel 2000, або внесені зміни в існуючі метод або властивість. Це може змінити розміщення об’єкта і привести до появи помилок в додатках Visual C #, що використовують для автоматизації програми Microsoft Excel 2002 надаються їм відомості про типи. Для запобігання подібних проблем рекомендується при розробці та перевірці клієнта автоматизації використовувати відомості про типи для самої ранньої версії підтримуваного додатки Microsoft Office.

У наступному прикладі розглянуто побудову клієнта автоматизації з використанням раннього зв’язування. Зверніть увагу, що використання раннього зв’язування вимагає вказівки бібліотеки типів для клієнта автоматизації.

Створення клієнта автоматизації, що використовує раннє зв’язування

1. Запустіть Microsoft Visual Studio.NET. У меню Файл виберіть команду Створити, а потім виберіть пункт Проект. Виберіть з числа проектів Visual C # тип Додаток Windows. За замовчуванням створюється форма Form1.
2. Додайте посилання на бібліотеку Microsoft Excel Object Library. Для цього виконайте такі дії. a. В меню Проект виберіть команду Додати посилання.
b. На вкладці COM виберіть Microsoft Excel Object Library і натисніть кнопку Вибрати.

Примітка. Microsoft Office 2003 включає основні збірки взаємодії (PIA). Microsoft Office XP не включає ці збірки, але їх можна завантажити. Додаткові відомості про основні збірках взаємодії (PIA) для Microsoft Office XP містяться в наступній статті Microsoft Knowledge Base:
328912 (support.microsoft.com/kb/328912/RU/) INFO: Microsoft Office XP PIAs Are Available for Download
c. Щоб зберегти вибране значення у вікні Додавання посилання, натисніть кнопку OK. При появі пропозиції створити збірку-обгортку для бібліотек натисніть кнопку Так.
 
3. У меню Вигляд виберіть пункт Область елементів, щоб відобразити панель інструментів і додати кнопку до форми Form1.
4. Двічі клацніть кнопку Button1. З’явиться вікно коду для форми.
5. У цьому вікні замініть наступний код private void button1_Click (object sender, System.EventArgs e)
{
}
     
на: private void button1_Click (object sender, System.EventArgs e)
{
 Excel.Application objApp;
 Excel._Workbook objBook;
 Excel.Workbooks objBooks;
 Excel.Sheets objSheets;
 Excel._Worksheet objSheet;
 Excel.Range range;

 try
 {
  // Instantiate Excel and start a new workbook.
  objApp = new Excel.Application();
  objBooks = objApp.Workbooks;
  objBook = objBooks.Add( Missing.Value );
  objSheets = objBook.Worksheets;
  objSheet = (Excel._Worksheet)objSheets.get_Item(1);

  range = objSheet.get_Range(“A1”, Missing.Value);

  range.set_Value(Missing.Value, “Hello, World!” );

  //Return control of Excel to the user.
  objApp.Visible = true;
  objApp.UserControl = true;
 }
 catch( Exception theException )
 {
  String errorMessage;
  errorMessage = “Error: “;
  errorMessage = String.Concat( errorMessage, theException.Message );
  errorMessage = String.Concat( errorMessage, ” Line: ” );
  errorMessage = String.Concat( errorMessage, theException.Source );

  MessageBox.Show( errorMessage, “Error” );
 }

     
 
6. Перейдіть в початок вікна коду. В кінець списку директив using додайте наступні рядки: using System.Reflection;
using Excel = Microsoft.Office.Interop.Excel;


Пізніше зв’язування

На відміну від раннього зв’язування, пізніше зв’язування зіставляє виклики властивостей і методів відповідних об’єктів в процесі виконання програми. Для цього в необхідних об’єктах повинен бути реалізований спеціальний інтерфейс COM: IDispatch. Метод IDispatch :: GetIDsOfNames дозволяє запитувати об’єкт про підтримувані методах і властивості, а метод IDispatch :: Invoke дозволяє викликати ці властивості та методи. Це дає можливість при використанні пізнього зв’язування уникнути деяких залежностей від версії, властивих раннього зв’язування. Недоліком пізнього зв’язування є те, що воно не дозволяє перевіряти цілісність коду автоматизації на етапі компіляції і не підтримує можливості Intellisense, що забезпечують правильність викликів методів і властивостей.

Для використання пізнього зв’язування Visual C # необхідно застосувати метод System.Type.InvokeMember. Цей метод викликає методи IDispatch :: GetIDsOfNames і IDispatch :: Invoke для прив’язки до методів і властивостями сервера автоматизації.

Створення клієнта автоматизації, що використовує пізніше зв’язування

1. Запустіть Microsoft Visual Studio.NET. У меню Файл виберіть команду Створити, а потім – пункт Проект. Виберіть з числа проектів Visual C # тип Додаток Windows. За замовчуванням створюється форма Form1.
2. У меню Вигляд виберіть пункт Область елементів, щоб відобразити панель інструментів і додати кнопку до форми Form1.
3. Двічі клацніть кнопку Button1. З’явиться вікно коду для форми.
4. У цьому вікні замініть код private void button1_Click (object sender, System.EventArgs e)
{
}
      
на: private void button1_Click (object sender, System.EventArgs e)
{
 object objApp_Late;
 object objBook_Late;
 object objBooks_Late;
 object objSheets_Late;
 object objSheet_Late;
 object objRange_Late;
 object[] Parameters;

 try
 {
  // Instantiate Excel.
  objApp_Late = (object)new Excel.Application();

  //Get the workbooks collection.
  objBooks_Late = objApp_Late.GetType().InvokeMember( “Workbooks”,
  BindingFlags.GetProperty, null, objApp_Late, null );

  //Add a new workbook.
  objBook_Late = objBooks_Late.GetType().InvokeMember( “Add”,
   BindingFlags.InvokeMethod, null, objBooks_Late, null );

  //Get the worksheets collection.
  objSheets_Late = objBook_Late.GetType().InvokeMember( “Worksheets”,
   BindingFlags.GetProperty, null, objBook_Late, null );

  //Get the first worksheet.
  Parameters = new Object[1];
  Parameters[0] = 1;
  objSheet_Late = objSheets_Late.GetType().InvokeMember( “Item”,
   BindingFlags.GetProperty, null, objSheets_Late, Parameters );

  //Get a range object that contains cell A1.
  Parameters = new Object[2];
  Parameters[0] = “A1”;
  Parameters[1] = Missing.Value;
  objRange_Late = objSheet_Late.GetType().InvokeMember( “Range”,
   BindingFlags.GetProperty, null, objSheet_Late, Parameters );

  //Write “Hello, World!” in cell A1.
  Parameters = new Object[1];
  Parameters[0] = “Hello, World!”;
  objRange_Late.GetType().InvokeMember( “Value”, BindingFlags.SetProperty,
   null, objRange_Late, Parameters );

  //Return control of Excel to the user.
  Parameters = new Object[1];
  Parameters[0] = true;
  objApp_Late.GetType().InvokeMember( “Visible”, BindingFlags.SetProperty,
   null, objApp_Late, Parameters );
  objApp_Late.GetType().InvokeMember( “UserControl”, BindingFlags.SetProperty,
   null, objApp_Late, Parameters );
 }
 catch( Exception theException )
 {
  String errorMessage;
  errorMessage = “Error: “;
  errorMessage = String.Concat( errorMessage, theException.Message );
  errorMessage = String.Concat( errorMessage, ” Line: ” );
  errorMessage = String.Concat( errorMessage, theException.Source );

  MessageBox.Show( errorMessage, “Error” );
 }
}
     
 
5. Перейдіть в початок вікна коду. В кінець списку директив using додайте наступний рядок: using System.Reflection;


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


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

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

Ваш отзыв

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

*

*