В этой лекции вы узнаете, как:
Process на закладке Components (Компоненты) окна Области элементов.Automation - это технология, основанная на стандарте взаимодействия COM, который применяется при разработке совместно используемых приложений и компонент. Важно, что понимания того, как работают используемые компоненты, при этом не требуется. Automation позволяет использовать функции одного приложения из другого приложения. Функции приложений Windows, которые полностью поддерживают Automation, доступны в виде коллекций объектов, с которыми ассоциированы свойства и методы. Приложения Windows, которые предоставляют свои объекты, называются объектными, или серверными, приложениями, а программы, которые используют эти объекты, называются управляющими, или клиентскими, приложениями. Хотя элементы управления Visual Studio .NET больше не разрабатываются в соответствии со спецификациями COM, вы по-прежнему можете использовать в программах на Visual Basic .NET компоненты COM.
В настоящий момент в качестве объектных или управляющих приложений могут использоваться следующие приложения Microsoft:
В Visual Basic .NET вы можете создать как объектные приложения, так и управляющие приложения, поддерживающие Automation. Создание приложения, которое поддерживает Automation, выходит за рамки этой лекции. Однако создание управляющих приложений, которые используют функции Automation, во всех версиях Visual Basic является простым процессом, и будет обсуждаться в этой лекции.
В следующих разделах вы узнаете, как писать программы на Visual Basic, которые работают с Excel 2002. Обратите внимание, что объекты, свойства и методы, предоставляемые этим приложением, обычно связаны с командами меню и опциями диалоговых окон, предоставляемых приложением. Эти базовые навыки можно использовать для автоматизации объектов в Word, Outlook, PowerPoint и других приложениях и компонентах, поддерживающих стандарты COM.
Object Browser (Обозреватель объектов) из Visual Studio - это утилита, которая применяется для:
В следующем упражнении вы будете использовать Object Browser (Обозреватель объектов) для просмотра объектов Automation, предоставляемых Excel 2002.
В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Появится диалоговое окно Add Reference (Добавить ссылку), показанное ниже.

Диалоговое окно Add Reference (Добавить ссылку) содержит три закладки для объектов, доступные в вашей системе: .NET, COM и Projects (Проекты). Закладка .NET содержит объекты, которые соответствуют спецификациям .NET, в том числе компоненты Crystal Reports, объекты, предоставляемые средой разработки Visual Studio .NET и различные системные объекты. Закладка COM содержит приложения и компоненты Component Object Model, в том числе объекты приложений Microsoft Office. Закладка Projects (Проекты) содержит объекты, предоставляемые вашими собственными объектами на Visual Basic, которые вы можете использовать. Добавление ссылок в проект не делает скомпилированную программу больше по размеру. Однако чем больше ссылок, тем дольше Visual Basic будет загружать и компилировать программу. Поэтому Visual Basic добавляет ссылки на библиотеки Automation, только если вы об этом попросите.
Прокрутите алфавитный список вниз и щелкните на ссылке с названием Microsoft Excel 10.0 Object Library. Обычно этот список довольно длинный, и при просмотре его приходится долго прокручивать - особенно когда вы наталкиваетесь на каталог библиотек объектов Microsoft.
Выбрав Microsoft Excel 10.0

Щелкните на OK, чтобы закрыть диалоговое окно и добавить ссылку в проект. Вы увидите следующее диалоговое окно.

Так как компоненты COM больше не поддерживаются средой разработки Visual Studio напрямую, Visual Studio требует, чтобы либо в проект была включена ссылка на первичную сборку взаимодействия, либо в проекте самой Visual Studio была сгенерирована локальная "оболочка", содержащая такие же объявления классов. Большинство приложений и компонент COM требуют оболочек для всех создаваемых вами новых ссылок на библиотеки.
В меню View (Вид) щелкните на команде Object Browser (Обозреватель объектов). (Быстрая клавиша для отображения Обозревателя объектов - (F2).) Появится Object Browser (Обозреватель объектов), как показано ниже.

Обозреватель объектов содержит иерархический древовидный список ссылок и компонент. Иерархия объектов показана на левой панели Object Browser (Обозреватель объектов), а отдельные члены - на правой. В нижней части Обозревателя объектов находится панель, которая содержит информацию о синтаксисе выбранного объекта, когда она доступна. Обозреватель объектов также предлагает несколько полезных инструментов, предназначенных для поиска необходимой информации. Раскрывающийся список Browse (Обзор) позволяет отобразить отдельные библиотеки объектов и компоненты вашего проекта. Также имеется кнопка Find Symbol (Найти символ), которую можно использовать для поиска в большом списке библиотеки объектов отдельных объектов, свойств, методов и событий. Кнопка Back (Назад) позволяет вернуться к просмотру предыдущего списка объектов.
Прокрутите панель Members (Члены) и щелкните на методе Quit. Ваш экран будет выглядеть примерно так.

В нижней части Обозревателя объектов появится синтаксис метода Quit. Этот метод закрывает приложение Excel по окончании его использования. Это стандартная функция большинства сессий
Вы пока что закончили изучение объектов. Теперь настало время заставить команды Excel Automation выполнить работу.
Чтобы использовать команды Excel в программе на Visual Basic, выполните следующие шаги. Так как эти шаги применимы и к другим приложениям, вы можете использовать эти рекомендации для встраивания в ваши собственные программы функциональности большинства приложений, поддерживающих Automation.
Шаг 1. С помощью команды Add Reference (Добавить ссылку), предоставляемой Visual Studio, добавьте в ваш проект необходимые ссылки на библиотеки объектов.
Шаг 2. Напишите программу на Visual Basic. В процедуре события, в которой вы планируете использовать Automation, используйте оператор Dim для объявления типа объектов Automation. Затем используйте функции CType и CreateObject для создания экземпляра этого объекта, как показано здесь:
Dim xlApp As Excel.Application
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
В Visual Basic 6 вы могли создавать для приложения переменную типа Object, а затем во время выполнения программы присвоить ей конкретный тип приложения. Эта техника присвоения переменной, называемая поздним связыванием, не рекомендуется для кода Visual Basic .NET. Переменные, которые хранят объекты Automation, должны получать требуемый тип при разработке и, таким образом, быть привязанными к данным при компиляции (так называемое раннее связывание), как показано выше. Функция CType при компиляции возвращает в переменную приложения конкретный тип приложения.
Шаг 3. Используйте в процедуре события методы и свойства объекта Automation, сверившись об их синтаксисе с Object Browser (Обозреватель объектов) или документацией по приложению. Следующий пример кода использует метод WorksheetFunction.Pmt из Excel:
Dim LoanPayment As Single
LoanPayment = xlApp.WorksheetFunction.Pmt _
(txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
MsgBox("Платеж за месяц " _
Format(Abs(LoanPayment), "$#.##"), , "Закладная")
Шаг 4. Когда вы закончите использовать приложение, вызовите специальную команду для завершения этого приложения (если вы не хотите, чтобы оно продолжало работать). Например:
xlApp.Quit()
Эта команда Quit - тот же самый метод, о котором вы узнали с помощью Object Browser (Обозревателя объектов) из Visual Studio.
В следующем упражнении вы создадите приложение Visual Basic, которое для вычисления выплат процентов по закладной использует метод Pmt из Excel. Аргументы Pmt будут взяты из трех объектов текстового поля вашей формы. Программа будет написана полностью на Visual Basic с использованием функциональности Excel, предоставляемой через Automation.
Label нарисуйте большую метку, предназначенную для названия вашей программы.TextBox три объекта текстового поля. Объекты текстового поля позволят ввести аргументы для функции Pmt.Label рядом с каждым из объектов текстового поля нарисуйте по метке. Эти метки будут определять аргументы функции Pmt, чтобы помочь вам вводить их в нужном месте.Button и нарисуйте кнопку в нижней части формы.Установите для объектов формы следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Label1 | Font | Microsoft Sans Serif, Bold, 11 point |
| Text | "Вычисление выплат с помощью Excel" | |
| TextAlign | MiddleCenter | |
| TextBox1 | Name | txtInterest |
| Text | пустой (empty) | |
| TextBox2 | Name | txtMonths |
| Text | пустой (empty) | |
| TextBox3 | Name | txtPrincipal |
| Text | пустой (empty) | |
| Label2 | Text | "Проценты" |
| Label3 | Text | "Месяцы" |
| Label4 | Text | "Основной долг" |
| Button1 | Name | btnCalculate |
| Text | "Вычислить" | |
| Form1 | Text | "Закладная" |
Ваша форма должна выглядеть примерно так.

btnCalculate_Click, сделайте двойной щелчок мышью на кнопке Вычислить.Для запуска команд Excel с помощью Automation и вычисления выплат по закладной введите следующий код программы:
Dim xlApp As Excel.Application
Dim LoanPayment As Single
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
LoanPayment = xlApp.WorksheetFunction.Pmt _
(txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
MsgBox("Платеж за месяц " _
Format(Abs(LoanPayment), "$#.##"), , "Закладная")
xlApp.Quit()
Эта процедура события объявляет переменную с именем xlApp, имеющую тип Excel.Application, что теперь допустимо, так как вы создали ссылку на библиотеку объектов Microsoft Excel 10.0.
Excel.Application в Редакторе кода подчеркнут синей волнистой линией, то это, вероятно, означает, что вы забыли добавить ссылку или просто начали вводить этот код, не выполнив упражнение по Object Browser (Обозреватель объектов). Вернитесь назад и создайте ссылку на библиотеку прямо сейчас, используя команду Add Reference (Добавить ссылку) из меню Project (Проект).Затем эта процедура с помощью функций CreateObject и CType присваивает тип переменной xlApp и заставляет эту переменную работать, вызывая метод WorksheetFunction.Pmt из Excel. Три аргумента для метода Pmt берутся из трех объектов текстового поля в форме. Так как функция Pmt возвращает для выплат отрицательное значение, то для отображения этого числа как положительного с плавающей точкой я использовал функцию Abs (модуль) из класса System.Math библиотеки .NET Framework. (В Excel выплаты по займам обычно отображаются как отрицательные числа, но в форме Visual Basic выплаты обычно выглядят гораздо лучше, если они отображаются как положительные величины.) Заметьте, что если один из требуемых аргументов функции Pmt пропущен, процедура события выдаст сообщение об ошибке времени исполнения. (Вы знаете, как можно устранить этот недостаток с помощью структуры выбора или обработчика ошибок?)
Наконец, процедура с помощью окна сообщения отображает выплаты по закладной, и закрывает приложение Excel с помощью метода Quit. В этом примере приложение Excel никогда не открывается, так что пользователь даже не узнает, что оно загружалось.
Прокрутите код в Редакторе кода в самый верх, а затем введите следующий оператор программы:
Imports System.Math
Это объявление встроит в проект библиотеку классов System.Math и предоставит доступ к использованной нами функции Abs. (После того, как вы сделаете эту ссылку, метод Abs больше не будет подчеркнут синей волнистой линией, присутствие которой является визуальной подсказкой о том, что объект, метод или свойство не определено.)
Теперь, чтобы увидеть, как работает Excel Automation, запустите эту программу.
Щелкните на кнопке Start (Начать) стандартной панели инструментов. Появится калькулятор выплат по закладной.
Введите в текстовое поле Основной долг число 150000. Ваша форма долж-на выглядеть примерно так.

Щелкните на кнопке Вычислить. Для вычисления выплат по закладной на сумму $150000 при 9 процентной ставке за 360 месяцев (30 лет) программа использует Excel. Как видно из следующей иллюстрации, результат в окне сообщения равен $1206.93. (Помните, что если это выплаты по займу на покупку дома, то это количество представляет только сумму и процентную ставку - в нее не включены налоги, страховка и другие обычные составляющие!)

Теперь попробуем выполнить упражнение Excel Automation, которое использует множество функций для работы с отображаемой книгой Excel.
Button, добавьте в форму большую кнопку.Text объекта кнопки на значение Создать рабочий лист, а затем свойство Text формы на значение Создание рабочих листов Excel. Это единственные свойства, которые вы установите для этой демонстрационной программы - большая часть работы будет выполнена в Microsoft Excel.Button1_Click, сделайте двойной щелчок мышью на кнопке Создать рабочий лист.Введите следующие операторы программы:
'Объявляем объектные переменные Excel и создаем типы
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook)
xlSheet = CType(xlBook.Worksheets(1), Excel.Worksheet)
'Добавляем данные
xlSheet.Cells(1, 2) = 5000
xlSheet.Cells(2, 2) = 75
xlSheet.Cells(3, 1) = "Всего"
'Вводим в ячейку B3 формулу Sum
xlSheet.Range("B3").Formula = "=Sum(R1C2:R2C2)"
'Форматируем ячейку B3 жирным шрифтом
xlSheet.Range("B3").Font.Bold = True
'Отображаем лист
xlSheet.Application.Visible = True
'Сохраняем лист в папке c:\vbnet03sbs\Гл.13
xlSheet.SaveAs("C:\vbnet03sbs\Гл.13\myexcelsheet.xls")
'Оставляем Excel работать с открытым листом
Код программы этой процедуры события несколько длиннее, чем предыдущий пример Excel Automation - он мог бы быть еще длиннее, если бы вы решили добавить в таблицу много значений и использовать различные опции форматирования. Практический интерес представляют первые три объявления переменных и операторы CreateObject. Так как я на самом деле управляю таблицей Excel, а не просто запускаю команды Excel, мне нужно создать три переменные Excel и назначить им правильные типы из библиотеки объектов Microsoft Excel 10.0. Первое объявление переменной ссылается на тип Excel.Application, второе объявление указывает на тип Excel.Excel.Application ), а третье объявление переменной ссылается на тип Excel.
Остальная часть процедуры события загружает значения в ячейки Excel. (Обратите внимание на разницу между тем, как вводятся числовые и строковые значения.) Затем в ячейку B3 вводится формула, которая использует функцию Sum для вычисления суммы ячеек B1 и B2, а результат форматируется жирным шрифтом. В этот момент процедура события отображает активный лист, и этот лист сохраняется на диск в папку c:\vbnet03sbs\Гл.13. (Если такой файл уже существует, появится диалоговое окно, спрашивающее, действительно ли вы хотите перезаписать файл.) После этого процедура события завершится, и приложение Excel остается открытым и видимым на экране, приглашая пользователя выполнить в Excel дополнительные задания. (Заметьте, что программа на Visual Basic также продолжает работать.) Программу также можно закрыть с помощью метода Quit, как это делалось в первом примере Excel Automation.
Щелкните на кнопке Start (Начать) стандартной панели инструментов.
Появится простая форма вашего проекта, показанная ниже.

Щелкните на кнопке Создать рабочий лист. Visual Basic запускает Excel и быстро выполняет поставленные вами задачи Automation. После того, как свойство Visible установлено на True, лист Excel появляется на вашем экране, как показано на рисунке ниже.

Обратите внимание на положение и содержимое ячеек в столбцах A и B - команды Automation выполнили свою работу, и функция Sum выдала корректный результат в ячейке B3 (5000 + 75 = 5075). Текущее имя файла (myexcelsheet.xls) появляется в строке заголовка Excel.
Вы узнали об основных приемах автоматизации приложения Excel. Если вы захотите исследовать Automation самостоятельно, подробности об объектах приложений вы можете узнать с помощью Обозревателя объектов.
В лекциях 3 и 11 вы использовали метод Process.Start для запуска интернет-браузера системы и просмотра веб-страниц. Метод Process.Start можно использовать для запуска любого приложения Windows, имеющегося в вашей системе и зарегистрированного в системном реестре. При использовании метода Process.Start вам не требуется указывать путь, так как указанное вами приложение или расширение файла распознается системой, а метод Process.Start не использует для своей работы Automation. Например, следующая команда Process.Start запускает приложение Notepad (Блокнот):
System.Diagnostics.Process.Start("notepad.exe")
Единственной проблемой, связанной с продемонстрированной мной техникой, является то, что если блокнот запущен, нет простого способа управлять им. Visual Basic запускает приложение Windows, но не может остановить его. Решение проблемы состоит в использовании одной из функций Visual Studio, связанной с управлением процессами Windows. В частности, вы можете запускать приложения или процессы с помощью компоненты Process, находящейся на закладке Components (Компоненты) окна Toolbox (Область элементов) среды Visual Studio. В следующем упражнении вы узнаете, как использовать компоненту Process для запуска и остановки из программы на Visual Basic приложения Notepad (Блокнот). Эту методику можно использовать для запуска и остановки любого приложения Windows.
Button две кнопки.Text объекта Button1 на значение Запустить блокнот, а свойство Text объекта Button2 на значение Остановить блокнот. Установите свойство Text формы равным Примеры запуска процесса. Теперь добавьте в проект невидимую компоненту Process, которую Visual Basic использует для управления приложением Notepad (Блокнот) во время его выполнения.Щелкните на закладке Components (Компоненты) Области элементов среды Visual Studio. Эта закладка выглядит так.

До сих пор вы использовали только закладку Windows Forms окна Toolbox (Область элементов), но закладка Components (Компоненты) также очень полезна. Она содержит компоненты .NET, которые осуществляют мониторинг событий операционной системы и среды разработки Visual Studio.
Process на закладке Components (Компоненты). Компонента Process добавится в область компонент под формой, аналогично другим невидимым элементам управления Toolbox (Область элементов). У этой компоненты нет видимого интерфейса пользователя; она просто представляет приложение, которое запущено вашим проектом.Process1, а затем используйте окно Properties (Свойства) для установки свойства Name объекта на значение noteProcess.В окне Properties (Свойства) щелкните на знаке "плюс" (+) рядом с категорией StartInfo, в результате чего она откроется, а затем установите свойство FileName равным notepad.exe. Используйте имя объекта noteProcess в коде вашей программы, когда захотите запустить, остановить или исследовать состояние приложения Notepad (Блокнот). Свойство FileName устанавливает имя приложения равным notepad.exe. При корректной установке приложения это имя можно найти в системном реестре. (Если вы хотите запустить другое приложение, то измените это имя, например, на winword.exe или excel.exe.)
Теперь ваша форма выглядит примерно так.

Сделайте двойной щелчок мышью на кнопке Запустить блокнот формы, а затем введите в Редакторе кода следующий оператор программы:
noteProcess.Start()
Так как вы уже указали имя приложения с помощью компоненты Process, здесь его указывать не требуется. Имя объекта noteProcess содержит всю необходимую информацию.
Введите в Редакторе кода следующий оператор программы:
noteProcess.CloseMainWindow()
Метод CloseMainWindow является эквивалентом щечку на кнопке Закрыть в строке заголовка Блокнота. Если у пользователя в приложении есть несохраненный файл, то прежде, чем приложение будет закрыто, появится запрос на сохранение этого файла. (Приложение также можно закрыть с помощью метода Kill, но этот вариант не позволит сохранить изменения.)
Прокрутите код программы формы в самый верх, а затем введите следующие ссылки на классы:
Imports System.Threading Imports System.Diagnostics
Эти классы System используются, когда вы управляете процессами из вашего кода программы, хотя они и не требуются, если вы используете только методы Start и CloseMainWindow, как это сделал я. (Я включаю их для того, чтобы определить классы Framework, которые могут понадобиться для дальнейшего изучения этого направления.)
Щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов, а затем запустите программу.
Появится следующая форма.

Щелкните на кнопке Запустить блокнот. Ваша программа запустит Notepad (Блокнот).

CloseMainWindow. Вы можете запускать и останавливать Notepad (Блокнот) сколько вам захочется - ваша программа теперь может управлять процессами запускаемых вами приложений, так как связывает их с объектом noteProcess.| Чтобы | Сделайте следующее |
|---|---|
| Добавить в ваш проект ссылку на компоненту или приложение, которое поддерживает Automation | В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Далее щелкните на закладке COM, на желаемой библиотеке объектов, на кнопке Select (Выбрать), а затем на OK. |
| Просмотреть объекты, которые доступны для использования в вашем проекте | В меню View (Вид) щелкните на команде Object Browser (Обозреватель объектов). Выберите с помощью иерархической древовидной структуры на панели Objects (Объекты) те объекты, которые вы хотите изучить. |
| Создать а программе объект Automation | Используйте оператор Dim и функции CType и CreateObject. Например: Dim xlApp As Excel.Application
xlApp = CType(CreateObject _
("Excel.Application"), Excel.Application)
|
| Получить с помощью Automation доступ к функциям приложения | Создайте объект Automation, а затем сошлитесь на методы или свойства этого объекта. Например: xlApp.Quit() |
| Запускать и останавливать приложения из Visual Basic | Добавьте в форму компоненту Process, сделав двойной щелчок мышью на элементе Process на закладке Components (Компоненты) Области элементов. Установите свойства Name и FileName объекта процесса, а затем используйте для запуска и остановки процесса из вашего кода программы следующие операторы программы соответственно: Objectname.Start() Objectname.CloseMainWindow() |
В этой лекции вы узнаете, как:
Process на закладке Components (Компоненты) окна Области элементов.Automation - это технология, основанная на стандарте взаимодействия COM, который применяется при разработке совместно используемых приложений и компонент. Важно, что понимания того, как работают используемые компоненты, при этом не требуется. Automation позволяет использовать функции одного приложения из другого приложения. Функции приложений Windows, которые полностью поддерживают Automation, доступны в виде коллекций объектов, с которыми ассоциированы свойства и методы. Приложения Windows, которые предоставляют свои объекты, называются объектными, или серверными, приложениями, а программы, которые используют эти объекты, называются управляющими, или клиентскими, приложениями. Хотя элементы управления Visual Studio .NET больше не разрабатываются в соответствии со спецификациями COM, вы по-прежнему можете использовать в программах на Visual Basic .NET компоненты COM.
В настоящий момент в качестве объектных или управляющих приложений могут использоваться следующие приложения Microsoft:
В Visual Basic .NET вы можете создать как объектные приложения, так и управляющие приложения, поддерживающие Automation. Создание приложения, которое поддерживает Automation, выходит за рамки этой лекции. Однако создание управляющих приложений, которые используют функции Automation, во всех версиях Visual Basic является простым процессом, и будет обсуждаться в этой лекции.
В следующих разделах вы узнаете, как писать программы на Visual Basic, которые работают с Excel 2002. Обратите внимание, что объекты, свойства и методы, предоставляемые этим приложением, обычно связаны с командами меню и опциями диалоговых окон, предоставляемых приложением. Эти базовые навыки можно использовать для автоматизации объектов в Word, Outlook, PowerPoint и других приложениях и компонентах, поддерживающих стандарты COM.
Object Browser (Обозреватель объектов) из Visual Studio - это утилита, которая применяется для:
В следующем упражнении вы будете использовать Object Browser (Обозреватель объектов) для просмотра объектов Automation, предоставляемых Excel 2002.
В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Появится диалоговое окно Add Reference (Добавить ссылку), показанное ниже.

Диалоговое окно Add Reference (Добавить ссылку) содержит три закладки для объектов, доступные в вашей системе: .NET, COM и Projects (Проекты). Закладка .NET содержит объекты, которые соответствуют спецификациям .NET, в том числе компоненты Crystal Reports, объекты, предоставляемые средой разработки Visual Studio .NET и различные системные объекты. Закладка COM содержит приложения и компоненты Component Object Model, в том числе объекты приложений Microsoft Office. Закладка Projects (Проекты) содержит объекты, предоставляемые вашими собственными объектами на Visual Basic, которые вы можете использовать. Добавление ссылок в проект не делает скомпилированную программу больше по размеру. Однако чем больше ссылок, тем дольше Visual Basic будет загружать и компилировать программу. Поэтому Visual Basic добавляет ссылки на библиотеки Automation, только если вы об этом попросите.
Прокрутите алфавитный список вниз и щелкните на ссылке с названием Microsoft Excel 10.0 Object Library. Обычно этот список довольно длинный, и при просмотре его приходится долго прокручивать - особенно когда вы наталкиваетесь на каталог библиотек объектов Microsoft.
Выбрав Microsoft Excel 10.0

Щелкните на OK, чтобы закрыть диалоговое окно и добавить ссылку в проект. Вы увидите следующее диалоговое окно.

Так как компоненты COM больше не поддерживаются средой разработки Visual Studio напрямую, Visual Studio требует, чтобы либо в проект была включена ссылка на первичную сборку взаимодействия, либо в проекте самой Visual Studio была сгенерирована локальная "оболочка", содержащая такие же объявления классов. Большинство приложений и компонент COM требуют оболочек для всех создаваемых вами новых ссылок на библиотеки.
В меню View (Вид) щелкните на команде Object Browser (Обозреватель объектов). (Быстрая клавиша для отображения Обозревателя объектов - (F2).) Появится Object Browser (Обозреватель объектов), как показано ниже.

Обозреватель объектов содержит иерархический древовидный список ссылок и компонент. Иерархия объектов показана на левой панели Object Browser (Обозреватель объектов), а отдельные члены - на правой. В нижней части Обозревателя объектов находится панель, которая содержит информацию о синтаксисе выбранного объекта, когда она доступна. Обозреватель объектов также предлагает несколько полезных инструментов, предназначенных для поиска необходимой информации. Раскрывающийся список Browse (Обзор) позволяет отобразить отдельные библиотеки объектов и компоненты вашего проекта. Также имеется кнопка Find Symbol (Найти символ), которую можно использовать для поиска в большом списке библиотеки объектов отдельных объектов, свойств, методов и событий. Кнопка Back (Назад) позволяет вернуться к просмотру предыдущего списка объектов.
Прокрутите панель Members (Члены) и щелкните на методе Quit. Ваш экран будет выглядеть примерно так.

В нижней части Обозревателя объектов появится синтаксис метода Quit. Этот метод закрывает приложение Excel по окончании его использования. Это стандартная функция большинства сессий
Вы пока что закончили изучение объектов. Теперь настало время заставить команды Excel Automation выполнить работу.
Чтобы использовать команды Excel в программе на Visual Basic, выполните следующие шаги. Так как эти шаги применимы и к другим приложениям, вы можете использовать эти рекомендации для встраивания в ваши собственные программы функциональности большинства приложений, поддерживающих Automation.
Шаг 1. С помощью команды Add Reference (Добавить ссылку), предоставляемой Visual Studio, добавьте в ваш проект необходимые ссылки на библиотеки объектов.
Шаг 2. Напишите программу на Visual Basic. В процедуре события, в которой вы планируете использовать Automation, используйте оператор Dim для объявления типа объектов Automation. Затем используйте функции CType и CreateObject для создания экземпляра этого объекта, как показано здесь:
Dim xlApp As Excel.Application
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
В Visual Basic 6 вы могли создавать для приложения переменную типа Object, а затем во время выполнения программы присвоить ей конкретный тип приложения. Эта техника присвоения переменной, называемая поздним связыванием, не рекомендуется для кода Visual Basic .NET. Переменные, которые хранят объекты Automation, должны получать требуемый тип при разработке и, таким образом, быть привязанными к данным при компиляции (так называемое раннее связывание), как показано выше. Функция CType при компиляции возвращает в переменную приложения конкретный тип приложения.
Шаг 3. Используйте в процедуре события методы и свойства объекта Automation, сверившись об их синтаксисе с Object Browser (Обозреватель объектов) или документацией по приложению. Следующий пример кода использует метод WorksheetFunction.Pmt из Excel:
Dim LoanPayment As Single
LoanPayment = xlApp.WorksheetFunction.Pmt _
(txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
MsgBox("Платеж за месяц " _
Format(Abs(LoanPayment), "$#.##"), , "Закладная")
Шаг 4. Когда вы закончите использовать приложение, вызовите специальную команду для завершения этого приложения (если вы не хотите, чтобы оно продолжало работать). Например:
xlApp.Quit()
Эта команда Quit - тот же самый метод, о котором вы узнали с помощью Object Browser (Обозревателя объектов) из Visual Studio.
В следующем упражнении вы создадите приложение Visual Basic, которое для вычисления выплат процентов по закладной использует метод Pmt из Excel. Аргументы Pmt будут взяты из трех объектов текстового поля вашей формы. Программа будет написана полностью на Visual Basic с использованием функциональности Excel, предоставляемой через Automation.
Label нарисуйте большую метку, предназначенную для названия вашей программы.TextBox три объекта текстового поля. Объекты текстового поля позволят ввести аргументы для функции Pmt.Label рядом с каждым из объектов текстового поля нарисуйте по метке. Эти метки будут определять аргументы функции Pmt, чтобы помочь вам вводить их в нужном месте.Button и нарисуйте кнопку в нижней части формы.Установите для объектов формы следующие свойства:
| Объект | Свойство | Установка |
|---|---|---|
| Label1 | Font | Microsoft Sans Serif, Bold, 11 point |
| Text | "Вычисление выплат с помощью Excel" | |
| TextAlign | MiddleCenter | |
| TextBox1 | Name | txtInterest |
| Text | пустой (empty) | |
| TextBox2 | Name | txtMonths |
| Text | пустой (empty) | |
| TextBox3 | Name | txtPrincipal |
| Text | пустой (empty) | |
| Label2 | Text | "Проценты" |
| Label3 | Text | "Месяцы" |
| Label4 | Text | "Основной долг" |
| Button1 | Name | btnCalculate |
| Text | "Вычислить" | |
| Form1 | Text | "Закладная" |
Ваша форма должна выглядеть примерно так.

btnCalculate_Click, сделайте двойной щелчок мышью на кнопке Вычислить.Для запуска команд Excel с помощью Automation и вычисления выплат по закладной введите следующий код программы:
Dim xlApp As Excel.Application
Dim LoanPayment As Single
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
LoanPayment = xlApp.WorksheetFunction.Pmt _
(txtInterest.Text / 12, txtMonths.Text, txtPrincipal.Text)
MsgBox("Платеж за месяц " _
Format(Abs(LoanPayment), "$#.##"), , "Закладная")
xlApp.Quit()
Эта процедура события объявляет переменную с именем xlApp, имеющую тип Excel.Application, что теперь допустимо, так как вы создали ссылку на библиотеку объектов Microsoft Excel 10.0.
Excel.Application в Редакторе кода подчеркнут синей волнистой линией, то это, вероятно, означает, что вы забыли добавить ссылку или просто начали вводить этот код, не выполнив упражнение по Object Browser (Обозреватель объектов). Вернитесь назад и создайте ссылку на библиотеку прямо сейчас, используя команду Add Reference (Добавить ссылку) из меню Project (Проект).Затем эта процедура с помощью функций CreateObject и CType присваивает тип переменной xlApp и заставляет эту переменную работать, вызывая метод WorksheetFunction.Pmt из Excel. Три аргумента для метода Pmt берутся из трех объектов текстового поля в форме. Так как функция Pmt возвращает для выплат отрицательное значение, то для отображения этого числа как положительного с плавающей точкой я использовал функцию Abs (модуль) из класса System.Math библиотеки .NET Framework. (В Excel выплаты по займам обычно отображаются как отрицательные числа, но в форме Visual Basic выплаты обычно выглядят гораздо лучше, если они отображаются как положительные величины.) Заметьте, что если один из требуемых аргументов функции Pmt пропущен, процедура события выдаст сообщение об ошибке времени исполнения. (Вы знаете, как можно устранить этот недостаток с помощью структуры выбора или обработчика ошибок?)
Наконец, процедура с помощью окна сообщения отображает выплаты по закладной, и закрывает приложение Excel с помощью метода Quit. В этом примере приложение Excel никогда не открывается, так что пользователь даже не узнает, что оно загружалось.
Прокрутите код в Редакторе кода в самый верх, а затем введите следующий оператор программы:
Imports System.Math
Это объявление встроит в проект библиотеку классов System.Math и предоставит доступ к использованной нами функции Abs. (После того, как вы сделаете эту ссылку, метод Abs больше не будет подчеркнут синей волнистой линией, присутствие которой является визуальной подсказкой о том, что объект, метод или свойство не определено.)
Теперь, чтобы увидеть, как работает Excel Automation, запустите эту программу.
Щелкните на кнопке Start (Начать) стандартной панели инструментов. Появится калькулятор выплат по закладной.
Введите в текстовое поле Основной долг число 150000. Ваша форма долж-на выглядеть примерно так.

Щелкните на кнопке Вычислить. Для вычисления выплат по закладной на сумму $150000 при 9 процентной ставке за 360 месяцев (30 лет) программа использует Excel. Как видно из следующей иллюстрации, результат в окне сообщения равен $1206.93. (Помните, что если это выплаты по займу на покупку дома, то это количество представляет только сумму и процентную ставку - в нее не включены налоги, страховка и другие обычные составляющие!)

Теперь попробуем выполнить упражнение Excel Automation, которое использует множество функций для работы с отображаемой книгой Excel.
Button, добавьте в форму большую кнопку.Text объекта кнопки на значение Создать рабочий лист, а затем свойство Text формы на значение Создание рабочих листов Excel. Это единственные свойства, которые вы установите для этой демонстрационной программы - большая часть работы будет выполнена в Microsoft Excel.Button1_Click, сделайте двойной щелчок мышью на кнопке Создать рабочий лист.Введите следующие операторы программы:
'Объявляем объектные переменные Excel и создаем типы
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
xlApp = CType(CreateObject("Excel.Application"), Excel.Application)
xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook)
xlSheet = CType(xlBook.Worksheets(1), Excel.Worksheet)
'Добавляем данные
xlSheet.Cells(1, 2) = 5000
xlSheet.Cells(2, 2) = 75
xlSheet.Cells(3, 1) = "Всего"
'Вводим в ячейку B3 формулу Sum
xlSheet.Range("B3").Formula = "=Sum(R1C2:R2C2)"
'Форматируем ячейку B3 жирным шрифтом
xlSheet.Range("B3").Font.Bold = True
'Отображаем лист
xlSheet.Application.Visible = True
'Сохраняем лист в папке c:\vbnet03sbs\Гл.13
xlSheet.SaveAs("C:\vbnet03sbs\Гл.13\myexcelsheet.xls")
'Оставляем Excel работать с открытым листом
Код программы этой процедуры события несколько длиннее, чем предыдущий пример Excel Automation - он мог бы быть еще длиннее, если бы вы решили добавить в таблицу много значений и использовать различные опции форматирования. Практический интерес представляют первые три объявления переменных и операторы CreateObject. Так как я на самом деле управляю таблицей Excel, а не просто запускаю команды Excel, мне нужно создать три переменные Excel и назначить им правильные типы из библиотеки объектов Microsoft Excel 10.0. Первое объявление переменной ссылается на тип Excel.Application, второе объявление указывает на тип Excel.Excel.Application ), а третье объявление переменной ссылается на тип Excel.
Остальная часть процедуры события загружает значения в ячейки Excel. (Обратите внимание на разницу между тем, как вводятся числовые и строковые значения.) Затем в ячейку B3 вводится формула, которая использует функцию Sum для вычисления суммы ячеек B1 и B2, а результат форматируется жирным шрифтом. В этот момент процедура события отображает активный лист, и этот лист сохраняется на диск в папку c:\vbnet03sbs\Гл.13. (Если такой файл уже существует, появится диалоговое окно, спрашивающее, действительно ли вы хотите перезаписать файл.) После этого процедура события завершится, и приложение Excel остается открытым и видимым на экране, приглашая пользователя выполнить в Excel дополнительные задания. (Заметьте, что программа на Visual Basic также продолжает работать.) Программу также можно закрыть с помощью метода Quit, как это делалось в первом примере Excel Automation.
Щелкните на кнопке Start (Начать) стандартной панели инструментов.
Появится простая форма вашего проекта, показанная ниже.

Щелкните на кнопке Создать рабочий лист. Visual Basic запускает Excel и быстро выполняет поставленные вами задачи Automation. После того, как свойство Visible установлено на True, лист Excel появляется на вашем экране, как показано на рисунке ниже.

Обратите внимание на положение и содержимое ячеек в столбцах A и B - команды Automation выполнили свою работу, и функция Sum выдала корректный результат в ячейке B3 (5000 + 75 = 5075). Текущее имя файла (myexcelsheet.xls) появляется в строке заголовка Excel.
Вы узнали об основных приемах автоматизации приложения Excel. Если вы захотите исследовать Automation самостоятельно, подробности об объектах приложений вы можете узнать с помощью Обозревателя объектов.
В лекциях 3 и 11 вы использовали метод Process.Start для запуска интернет-браузера системы и просмотра веб-страниц. Метод Process.Start можно использовать для запуска любого приложения Windows, имеющегося в вашей системе и зарегистрированного в системном реестре. При использовании метода Process.Start вам не требуется указывать путь, так как указанное вами приложение или расширение файла распознается системой, а метод Process.Start не использует для своей работы Automation. Например, следующая команда Process.Start запускает приложение Notepad (Блокнот):
System.Diagnostics.Process.Start("notepad.exe")
Единственной проблемой, связанной с продемонстрированной мной техникой, является то, что если блокнот запущен, нет простого способа управлять им. Visual Basic запускает приложение Windows, но не может остановить его. Решение проблемы состоит в использовании одной из функций Visual Studio, связанной с управлением процессами Windows. В частности, вы можете запускать приложения или процессы с помощью компоненты Process, находящейся на закладке Components (Компоненты) окна Toolbox (Область элементов) среды Visual Studio. В следующем упражнении вы узнаете, как использовать компоненту Process для запуска и остановки из программы на Visual Basic приложения Notepad (Блокнот). Эту методику можно использовать для запуска и остановки любого приложения Windows.
Button две кнопки.Text объекта Button1 на значение Запустить блокнот, а свойство Text объекта Button2 на значение Остановить блокнот. Установите свойство Text формы равным Примеры запуска процесса. Теперь добавьте в проект невидимую компоненту Process, которую Visual Basic использует для управления приложением Notepad (Блокнот) во время его выполнения.Щелкните на закладке Components (Компоненты) Области элементов среды Visual Studio. Эта закладка выглядит так.

До сих пор вы использовали только закладку Windows Forms окна Toolbox (Область элементов), но закладка Components (Компоненты) также очень полезна. Она содержит компоненты .NET, которые осуществляют мониторинг событий операционной системы и среды разработки Visual Studio.
Process на закладке Components (Компоненты). Компонента Process добавится в область компонент под формой, аналогично другим невидимым элементам управления Toolbox (Область элементов). У этой компоненты нет видимого интерфейса пользователя; она просто представляет приложение, которое запущено вашим проектом.Process1, а затем используйте окно Properties (Свойства) для установки свойства Name объекта на значение noteProcess.В окне Properties (Свойства) щелкните на знаке "плюс" (+) рядом с категорией StartInfo, в результате чего она откроется, а затем установите свойство FileName равным notepad.exe. Используйте имя объекта noteProcess в коде вашей программы, когда захотите запустить, остановить или исследовать состояние приложения Notepad (Блокнот). Свойство FileName устанавливает имя приложения равным notepad.exe. При корректной установке приложения это имя можно найти в системном реестре. (Если вы хотите запустить другое приложение, то измените это имя, например, на winword.exe или excel.exe.)
Теперь ваша форма выглядит примерно так.

Сделайте двойной щелчок мышью на кнопке Запустить блокнот формы, а затем введите в Редакторе кода следующий оператор программы:
noteProcess.Start()
Так как вы уже указали имя приложения с помощью компоненты Process, здесь его указывать не требуется. Имя объекта noteProcess содержит всю необходимую информацию.
Введите в Редакторе кода следующий оператор программы:
noteProcess.CloseMainWindow()
Метод CloseMainWindow является эквивалентом щечку на кнопке Закрыть в строке заголовка Блокнота. Если у пользователя в приложении есть несохраненный файл, то прежде, чем приложение будет закрыто, появится запрос на сохранение этого файла. (Приложение также можно закрыть с помощью метода Kill, но этот вариант не позволит сохранить изменения.)
Прокрутите код программы формы в самый верх, а затем введите следующие ссылки на классы:
Imports System.Threading Imports System.Diagnostics
Эти классы System используются, когда вы управляете процессами из вашего кода программы, хотя они и не требуются, если вы используете только методы Start и CloseMainWindow, как это сделал я. (Я включаю их для того, чтобы определить классы Framework, которые могут понадобиться для дальнейшего изучения этого направления.)
Щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов, а затем запустите программу.
Появится следующая форма.

Щелкните на кнопке Запустить блокнот. Ваша программа запустит Notepad (Блокнот).

CloseMainWindow. Вы можете запускать и останавливать Notepad (Блокнот) сколько вам захочется - ваша программа теперь может управлять процессами запускаемых вами приложений, так как связывает их с объектом noteProcess.| Чтобы | Сделайте следующее |
|---|---|
| Добавить в ваш проект ссылку на компоненту или приложение, которое поддерживает Automation | В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Далее щелкните на закладке COM, на желаемой библиотеке объектов, на кнопке Select (Выбрать), а затем на OK. |
| Просмотреть объекты, которые доступны для использования в вашем проекте | В меню View (Вид) щелкните на команде Object Browser (Обозреватель объектов). Выберите с помощью иерархической древовидной структуры на панели Objects (Объекты) те объекты, которые вы хотите изучить. |
| Создать а программе объект Automation | Используйте оператор Dim и функции CType и CreateObject. Например: Dim xlApp As Excel.Application
xlApp = CType(CreateObject _
("Excel.Application"), Excel.Application)
|
| Получить с помощью Automation доступ к функциям приложения | Создайте объект Automation, а затем сошлитесь на методы или свойства этого объекта. Например: xlApp.Quit() |
| Запускать и останавливать приложения из Visual Basic | Добавьте в форму компоненту Process, сделав двойной щелчок мышью на элементе Process на закладке Components (Компоненты) Области элементов. Установите свойства Name и FileName объекта процесса, а затем используйте для запуска и остановки процесса из вашего кода программы следующие операторы программы соответственно: Objectname.Start() Objectname.CloseMainWindow() |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.