Visual Basic .NET на уроках информатики

Автоматизация приложений Microsoft Office и управление процессами

Разбить на страницы
Показывать лекцию целиком

В этой лекции вы узнаете, как:

  • использовать Object Browser (Обозреватель объектов) для изучения объектов;
  • использовать Microsoft Excel для вычисления выплат по закладной;
  • управлять книгой Excel из Visual Basic .NET;
  • запускать и останавливать приложения Microsoft Windows с помощью компоненты Process.
  • Что нового в Visual Basic .NET?

  • В Visual Basic 6 для добавления объектов приложений в формы Visual Basic вы могли использовать элемент управления OLE Container. Элемент управления OLE Container больше не включен в Область элементов.
  • Visual Basic 6 использовал элементы управления ActiveX, основанные на технологии Component Object Model (COM). В Visual Basic .NET элементы управления больше не используют спецификации COM. Однако компоненты и приложения COM можно по-прежнему использовать в программах на Visual Basic .NET, добавив ссылку на эти компоненты на закладке COM диалогового окна Add Reference (Добавить ссылку). Когда вы выбираете компоненту COM, Visual Studio автоматически генерирует "оболочку", которая содержит все необходимые типы и классы.
  • Приложения и компоненты Microsoft Office XP (которые продолжают использовать спецификации COM) могут по-прежнему управляться с помощью приложений на Visual Basic .NET через механизм Automation, который является популярным методом доступа к объектам другого приложения. Однако в Visual Basic .NET объекты приложений должны присваиваться не во время исполнения, а во время компиляции. (Другими словами, при использовании Automation предпочтительнее раннее связывание, а не позднее.)
  • В Visual Basic 6 для запуска приложений Windows программисты часто использовали функцию Shell. В Visual Basic .NET запуск и остановка приложений производится с помощью компоненты Process на закладке Components (Компоненты) окна Области элементов.
  • Программирование объектов приложений с помощью Automation

    Automation - это технология, основанная на стандарте взаимодействия COM, который применяется при разработке совместно используемых приложений и компонент. Важно, что понимания того, как работают используемые компоненты, при этом не требуется. Automation позволяет использовать функции одного приложения из другого приложения. Функции приложений Windows, которые полностью поддерживают Automation, доступны в виде коллекций объектов, с которыми ассоциированы свойства и методы. Приложения Windows, которые предоставляют свои объекты, называются объектными, или серверными, приложениями, а программы, которые используют эти объекты, называются управляющими, или клиентскими, приложениями. Хотя элементы управления Visual Studio .NET больше не разрабатываются в соответствии со спецификациями COM, вы по-прежнему можете использовать в программах на Visual Basic .NET компоненты COM.

    В настоящий момент в качестве объектных или управляющих приложений могут использоваться следующие приложения Microsoft:

  • Microsoft Visual Studio .NET, Microsoft Visual Basic 6
  • Microsoft Word 2002, Microsoft Word 2000, Microsoft Word 97
  • Microsoft Excel 2002, Microsoft Excel 2000, Microsoft Excel 97, Microsoft Excel 95, Microsoft Excel 5.0
  • Microsoft PowerPoint 2002, Microsoft PowerPoint 2000, Microsoft PowerPoint 97
  • Microsoft Project 2000, Microsoft Project 97, Microsoft Project 95
  • Microsoft Outlook 2002, Microsoft Outlook 2000, Microsoft Outlook 97/98
  • Совет. В настоящий момент Microsoft распространяет язык программирования Visual Basic for Applications, так что вы можете встретить и приложения Windows не от Microsoft, которые поддерживают Automation и методики программирования Visual Basic. Будущие версии Microsoft Office также будут поддерживать Automation.

    Использование Automation в Visual Basic

    В Visual Basic .NET вы можете создать как объектные приложения, так и управляющие приложения, поддерживающие Automation. Создание приложения, которое поддерживает Automation, выходит за рамки этой лекции. Однако создание управляющих приложений, которые используют функции Automation, во всех версиях Visual Basic является простым процессом, и будет обсуждаться в этой лекции.

    Примечание. Приложения из набора Microsoft Office XP (Excel 2002, Word 2002, Access 2002, PowerPoint 2002 и Outlook 2002) могут предоставлять свою функциональность через Automation. Так как функции и объекты каждого из этих приложений уникальны, то прежде, чем перейти к примерам, изучите документацию на эти программные продукты или справочную систему по каждой из программ. Если в вашей системе Microsoft Office уже установлен, то для изучения доступных объектов, свойств и методов вы можете использовать Object Browser (Обозреватель объектов) из Visual Basic.

    В следующих разделах вы узнаете, как писать программы на Visual Basic, которые работают с Excel 2002. Обратите внимание, что объекты, свойства и методы, предоставляемые этим приложением, обычно связаны с командами меню и опциями диалоговых окон, предоставляемых приложением. Эти базовые навыки можно использовать для автоматизации объектов в Word, Outlook, PowerPoint и других приложениях и компонентах, поддерживающих стандарты COM.

    Object Browser (Обозреватель объектов) в Visual Studio

    Object Browser (Обозреватель объектов) из Visual Studio - это утилита, которая применяется для:

  • отображения объектов, свойств и методов, используемых программой, над которой вы работаете в среде разработки Visual Studio;
  • отображения объектов, свойств и методов, доступных из приложений, которые поддерживают Automation.
  • В следующем упражнении вы будете использовать Object Browser (Обозреватель объектов) для просмотра объектов Automation, предоставляемых Excel 2002.

    Использование Обозревателя объектов для просмотра объектов Excel

  • Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Excel Automation. В среде разработки появится новый проект.
  • В меню 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, только если вы об этом попросите.

  • Щелкните на закладке COM диалогового окна Add Reference (Добавить ссылку). Поле списка отображает компоненты COM, прописанные в системном реестре вашего компьютера. Для разных компьютеров этот список будет различаться.
  • Прокрутите алфавитный список вниз и щелкните на ссылке с названием Microsoft Excel 10.0 Object Library. Обычно этот список довольно длинный, и при просмотре его приходится долго прокручивать - особенно когда вы наталкиваетесь на каталог библиотек объектов Microsoft.

    Примечание. Excel 10.0 Object Library входит в Excel 2002 (другими словами, в Office XP). Если у вас нет такой версии Excel, используйте Object Browser (Обозреватель объектов) для изучения объектов приложения, имеющегося в вашей системе.
  • Выбрав Microsoft Excel 10.0 Object Library, щелкните на кнопке Select (Выбрать). Ваш экран должен выглядеть примерно так.

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

    Так как компоненты COM больше не поддерживаются средой разработки Visual Studio напрямую, Visual Studio требует, чтобы либо в проект была включена ссылка на первичную сборку взаимодействия, либо в проекте самой Visual Studio была сгенерирована локальная "оболочка", содержащая такие же объявления классов. Большинство приложений и компонент COM требуют оболочек для всех создаваемых вами новых ссылок на библиотеки.

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

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

  • Щелкните на знаке "плюс" (+) рядом с библиотекой объектов Interop.Excel, а затем на знаке "плюс" рядом с Excel. Панель Objects (Объекты) будет заполнена объектами Automation, предоставляемыми Excel.
  • Если необходимо, прокрутите этот список на панели Objects (Объекты), а затем щелкните на объекте Application. На панели Members (Члены) появится список методов, свойств и событий, ассоциированных с объектом Application. Это некоторые свойства, методы и события, которые Excel предоставляет для обработки информации в книгах.
  • Прокрутите панель Members (Члены) и щелкните на методе Quit. Ваш экран будет выглядеть примерно так.

    В нижней части Обозревателя объектов появится синтаксис метода Quit. Этот метод закрывает приложение Excel по окончании его использования. Это стандартная функция большинства сессий Office Automation. Синтаксис показывает главные аргументы (в данном случае их нет) и родительские объекты этого метода (Excel.Application).

  • Изучите библиотеку объектов Excel и другие библиотеки объектов, связанные с вашим приложением на Visual Basic.
  • Когда закончите, закройте Object Browser (Обозреватель объектов).
  • Вы пока что закончили изучение объектов. Теперь настало время заставить команды Excel Automation выполнить работу.

    Автоматизация Excel из Visual Basic

    Чтобы использовать команды 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.

    Примечание. Необходимо, чтобы в вашей системе был установлен Excel 2002. Если у вас более ранняя версия Excel, то вы можете адаптировать этот код программы к ней, но это далеко не тривиальная задача. По этой причине я не рекомендую Automation для программ, которые будут широко распространяться - особенно среди пользователей, имеющих различные версии Office.

    Создание калькулятора для выплат по закладной

  • В среде разработки отобразите форму, если она еще не отображена.
  • В верхней части формы с помощью элемента управления 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, запустите эту программу.

    Запуск программы Excel Automation

  • Щелкните на кнопке Start (Начать) стандартной панели инструментов. Появится калькулятор выплат по закладной.

    Примечание. Готовая программа Excel Automation лежит в папке c:\vbnet03sbs\Гл.13\excel automation.
  • Введите в текстовое поле Проценты число 0.09.
  • Введите в текстовое поле Месяцы число 360.
  • Введите в текстовое поле Основной долг число 150000. Ваша форма долж-на выглядеть примерно так.

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

  • Щелкните на кнопке OK окна сообщения, а затем произведите еще несколько вычислений для различных значений.
  • Когда закончите, щелкните на кнопке Закрыть строки заголовка формы.
  • Теперь попробуем выполнить упражнение Excel Automation, которое использует множество функций для работы с отображаемой книгой Excel.

    Работа с книгами Excel

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Excel Sheet Tasks. В этом упражнении используются команды Excel Automation, которые вставляют в ячейки листа числа и метки, применяют форматирование символов, вставляют функцию Sum и сохраняют книгу на диск. Используя эти базовые навыки, вы можете генерировать сложные книги Excel непосредственно из ваших приложений на Visual Basic.
  • В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Появится диалоговое окно Add Reference (Добавить ссылку).
  • Щелкните на закладке COM, затем в списке компонент на Microsoft Excel 10.0 Object Library, далее на кнопке Select и на OK. Если вы видите диалоговое окно первичной сборки взаимодействия, щелкните на Yes (Да).
  • Используя элемент управления Button, добавьте в форму большую кнопку.
  • Используя окно Properties (Свойства), установите свойство 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.Workbook (который основан на Excel.Application ), а третье объявление переменной ссылается на тип Excel.Worksheet (который основан на Excel.Workbook). Обратите внимание на эти важные объявления переменных и типов - они вам понадобятся при дальнейшей работе с Excel.

    Остальная часть процедуры события загружает значения в ячейки Excel. (Обратите внимание на разницу между тем, как вводятся числовые и строковые значения.) Затем в ячейку B3 вводится формула, которая использует функцию Sum для вычисления суммы ячеек B1 и B2, а результат форматируется жирным шрифтом. В этот момент процедура события отображает активный лист, и этот лист сохраняется на диск в папку c:\vbnet03sbs\Гл.13. (Если такой файл уже существует, появится диалоговое окно, спрашивающее, действительно ли вы хотите перезаписать файл.) После этого процедура события завершится, и приложение Excel остается открытым и видимым на экране, приглашая пользователя выполнить в Excel дополнительные задания. (Заметьте, что программа на Visual Basic также продолжает работать.) Программу также можно закрыть с помощью метода Quit, как это делалось в первом примере Excel Automation.

  • Чтобы сохранить проект и его файлы на диск, щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов.
  • Запуск программы Excel Sheet Tasks

  • Щелкните на кнопке Start (Начать) стандартной панели инструментов.

    Примечание. Готовая программа Excel Sheet Tasks лежит в папке c:\vbnet03sbs\Гл.13\excel sheet tasks.

    Появится простая форма вашего проекта, показанная ниже.

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

    Обратите внимание на положение и содержимое ячеек в столбцах A и B - команды Automation выполнили свою работу, и функция Sum выдала корректный результат в ячейке B3 (5000 + 75 = 5075). Текущее имя файла (myexcelsheet.xls) появляется в строке заголовка Excel.

  • Можете продолжить работу с листом Excel, а затем закройте это приложение. Заметьте, что написанная вами программа останется работать не зависимо от того, открыт Excel или нет.
  • Щелкните на кнопке Закрыть вашей программы на Visual Basic, чтобы остановить и ее.
  • Вы узнали об основных приемах автоматизации приложения Excel. Если вы захотите исследовать Automation самостоятельно, подробности об объектах приложений вы можете узнать с помощью Обозревателя объектов.

    Следующий шаг: запуск и остановка приложений Windows с помощью компоненты Process

    В лекциях 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.

    Управление работой Блокнота

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Start App.
  • Отобразите форму проекта, а затем добавьте в нее с помощью элемента управления Button две кнопки.
  • Установите свойство Text объекта Button1 на значение Запустить блокнот, а свойство Text объекта Button2 на значение Остановить блокнот. Установите свойство Text формы равным Примеры запуска процесса. Теперь добавьте в проект невидимую компоненту Process, которую Visual Basic использует для управления приложением Notepad (Блокнот) во время его выполнения.
  • Щелкните на закладке Components (Компоненты) Области элементов среды Visual Studio. Эта закладка выглядит так.

    До сих пор вы использовали только закладку Windows Forms окна Toolbox (Область элементов), но закладка Components (Компоненты) также очень полезна. Она содержит компоненты .NET, которые осуществляют мониторинг событий операционной системы и среды разработки Visual Studio.

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

    Примечание. Чтобы передать запускаемому приложению аргументы командной строки, установите свойство Arguments из категории StartInfo.

    Теперь ваша форма выглядит примерно так.

  • Сделайте двойной щелчок мышью на кнопке Запустить блокнот формы, а затем введите в Редакторе кода следующий оператор программы:

    noteProcess.Start()

    Так как вы уже указали имя приложения с помощью компоненты Process, здесь его указывать не требуется. Имя объекта noteProcess содержит всю необходимую информацию.

  • Снова отобразите форму, а затем сделайте двойной щелчок мышью на кнопке Остановить блокнот.
  • Введите в Редакторе кода следующий оператор программы:

    noteProcess.CloseMainWindow()

    Метод CloseMainWindow является эквивалентом щечку на кнопке Закрыть в строке заголовка Блокнота. Если у пользователя в приложении есть несохраненный файл, то прежде, чем приложение будет закрыто, появится запрос на сохранение этого файла. (Приложение также можно закрыть с помощью метода Kill, но этот вариант не позволит сохранить изменения.)

  • Прокрутите код программы формы в самый верх, а затем введите следующие ссылки на классы:

    Imports System.Threading
    Imports System.Diagnostics

    Эти классы System используются, когда вы управляете процессами из вашего кода программы, хотя они и не требуются, если вы используете только методы Start и CloseMainWindow, как это сделал я. (Я включаю их для того, чтобы определить классы Framework, которые могут понадобиться для дальнейшего изучения этого направления.)

  • Щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов, а затем запустите программу.

    Примечание. Готовая программа Start App лежит в папке c:\vbnet03sbs\Гл.13\start app.

    Появится следующая форма.

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

  • Снова отобразите форму, а затем щелкните мышью на кнопке Остановить блокнот. Visual Basic закрое приложение, используя метод CloseMainWindow. Вы можете запускать и останавливать Notepad (Блокнот) сколько вам захочется - ваша программа теперь может управлять процессами запускаемых вами приложений, так как связывает их с объектом noteProcess.
  • Щелкните на кнопке Закрыть формы, чтобы закрыть программу.
  • Краткая справка по лекции 13

    Чтобы Сделайте следующее
    Добавить в ваш проект ссылку на компоненту или приложение, которое поддерживает 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()
    Страницы:

    В этой лекции вы узнаете, как:

  • использовать Object Browser (Обозреватель объектов) для изучения объектов;
  • использовать Microsoft Excel для вычисления выплат по закладной;
  • управлять книгой Excel из Visual Basic .NET;
  • запускать и останавливать приложения Microsoft Windows с помощью компоненты Process.
  • Что нового в Visual Basic .NET?

  • В Visual Basic 6 для добавления объектов приложений в формы Visual Basic вы могли использовать элемент управления OLE Container. Элемент управления OLE Container больше не включен в Область элементов.
  • Visual Basic 6 использовал элементы управления ActiveX, основанные на технологии Component Object Model (COM). В Visual Basic .NET элементы управления больше не используют спецификации COM. Однако компоненты и приложения COM можно по-прежнему использовать в программах на Visual Basic .NET, добавив ссылку на эти компоненты на закладке COM диалогового окна Add Reference (Добавить ссылку). Когда вы выбираете компоненту COM, Visual Studio автоматически генерирует "оболочку", которая содержит все необходимые типы и классы.
  • Приложения и компоненты Microsoft Office XP (которые продолжают использовать спецификации COM) могут по-прежнему управляться с помощью приложений на Visual Basic .NET через механизм Automation, который является популярным методом доступа к объектам другого приложения. Однако в Visual Basic .NET объекты приложений должны присваиваться не во время исполнения, а во время компиляции. (Другими словами, при использовании Automation предпочтительнее раннее связывание, а не позднее.)
  • В Visual Basic 6 для запуска приложений Windows программисты часто использовали функцию Shell. В Visual Basic .NET запуск и остановка приложений производится с помощью компоненты Process на закладке Components (Компоненты) окна Области элементов.
  • Программирование объектов приложений с помощью Automation

    Automation - это технология, основанная на стандарте взаимодействия COM, который применяется при разработке совместно используемых приложений и компонент. Важно, что понимания того, как работают используемые компоненты, при этом не требуется. Automation позволяет использовать функции одного приложения из другого приложения. Функции приложений Windows, которые полностью поддерживают Automation, доступны в виде коллекций объектов, с которыми ассоциированы свойства и методы. Приложения Windows, которые предоставляют свои объекты, называются объектными, или серверными, приложениями, а программы, которые используют эти объекты, называются управляющими, или клиентскими, приложениями. Хотя элементы управления Visual Studio .NET больше не разрабатываются в соответствии со спецификациями COM, вы по-прежнему можете использовать в программах на Visual Basic .NET компоненты COM.

    В настоящий момент в качестве объектных или управляющих приложений могут использоваться следующие приложения Microsoft:

  • Microsoft Visual Studio .NET, Microsoft Visual Basic 6
  • Microsoft Word 2002, Microsoft Word 2000, Microsoft Word 97
  • Microsoft Excel 2002, Microsoft Excel 2000, Microsoft Excel 97, Microsoft Excel 95, Microsoft Excel 5.0
  • Microsoft PowerPoint 2002, Microsoft PowerPoint 2000, Microsoft PowerPoint 97
  • Microsoft Project 2000, Microsoft Project 97, Microsoft Project 95
  • Microsoft Outlook 2002, Microsoft Outlook 2000, Microsoft Outlook 97/98
  • Совет. В настоящий момент Microsoft распространяет язык программирования Visual Basic for Applications, так что вы можете встретить и приложения Windows не от Microsoft, которые поддерживают Automation и методики программирования Visual Basic. Будущие версии Microsoft Office также будут поддерживать Automation.

    Использование Automation в Visual Basic

    В Visual Basic .NET вы можете создать как объектные приложения, так и управляющие приложения, поддерживающие Automation. Создание приложения, которое поддерживает Automation, выходит за рамки этой лекции. Однако создание управляющих приложений, которые используют функции Automation, во всех версиях Visual Basic является простым процессом, и будет обсуждаться в этой лекции.

    Примечание. Приложения из набора Microsoft Office XP (Excel 2002, Word 2002, Access 2002, PowerPoint 2002 и Outlook 2002) могут предоставлять свою функциональность через Automation. Так как функции и объекты каждого из этих приложений уникальны, то прежде, чем перейти к примерам, изучите документацию на эти программные продукты или справочную систему по каждой из программ. Если в вашей системе Microsoft Office уже установлен, то для изучения доступных объектов, свойств и методов вы можете использовать Object Browser (Обозреватель объектов) из Visual Basic.

    В следующих разделах вы узнаете, как писать программы на Visual Basic, которые работают с Excel 2002. Обратите внимание, что объекты, свойства и методы, предоставляемые этим приложением, обычно связаны с командами меню и опциями диалоговых окон, предоставляемых приложением. Эти базовые навыки можно использовать для автоматизации объектов в Word, Outlook, PowerPoint и других приложениях и компонентах, поддерживающих стандарты COM.

    Object Browser (Обозреватель объектов) в Visual Studio

    Object Browser (Обозреватель объектов) из Visual Studio - это утилита, которая применяется для:

  • отображения объектов, свойств и методов, используемых программой, над которой вы работаете в среде разработки Visual Studio;
  • отображения объектов, свойств и методов, доступных из приложений, которые поддерживают Automation.
  • В следующем упражнении вы будете использовать Object Browser (Обозреватель объектов) для просмотра объектов Automation, предоставляемых Excel 2002.

    Использование Обозревателя объектов для просмотра объектов Excel

  • Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Excel Automation. В среде разработки появится новый проект.
  • В меню 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, только если вы об этом попросите.

  • Щелкните на закладке COM диалогового окна Add Reference (Добавить ссылку). Поле списка отображает компоненты COM, прописанные в системном реестре вашего компьютера. Для разных компьютеров этот список будет различаться.
  • Прокрутите алфавитный список вниз и щелкните на ссылке с названием Microsoft Excel 10.0 Object Library. Обычно этот список довольно длинный, и при просмотре его приходится долго прокручивать - особенно когда вы наталкиваетесь на каталог библиотек объектов Microsoft.

    Примечание. Excel 10.0 Object Library входит в Excel 2002 (другими словами, в Office XP). Если у вас нет такой версии Excel, используйте Object Browser (Обозреватель объектов) для изучения объектов приложения, имеющегося в вашей системе.
  • Выбрав Microsoft Excel 10.0 Object Library, щелкните на кнопке Select (Выбрать). Ваш экран должен выглядеть примерно так.

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

    Так как компоненты COM больше не поддерживаются средой разработки Visual Studio напрямую, Visual Studio требует, чтобы либо в проект была включена ссылка на первичную сборку взаимодействия, либо в проекте самой Visual Studio была сгенерирована локальная "оболочка", содержащая такие же объявления классов. Большинство приложений и компонент COM требуют оболочек для всех создаваемых вами новых ссылок на библиотеки.

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

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

  • Щелкните на знаке "плюс" (+) рядом с библиотекой объектов Interop.Excel, а затем на знаке "плюс" рядом с Excel. Панель Objects (Объекты) будет заполнена объектами Automation, предоставляемыми Excel.
  • Если необходимо, прокрутите этот список на панели Objects (Объекты), а затем щелкните на объекте Application. На панели Members (Члены) появится список методов, свойств и событий, ассоциированных с объектом Application. Это некоторые свойства, методы и события, которые Excel предоставляет для обработки информации в книгах.
  • Прокрутите панель Members (Члены) и щелкните на методе Quit. Ваш экран будет выглядеть примерно так.

    В нижней части Обозревателя объектов появится синтаксис метода Quit. Этот метод закрывает приложение Excel по окончании его использования. Это стандартная функция большинства сессий Office Automation. Синтаксис показывает главные аргументы (в данном случае их нет) и родительские объекты этого метода (Excel.Application).

  • Изучите библиотеку объектов Excel и другие библиотеки объектов, связанные с вашим приложением на Visual Basic.
  • Когда закончите, закройте Object Browser (Обозреватель объектов).
  • Вы пока что закончили изучение объектов. Теперь настало время заставить команды Excel Automation выполнить работу.

    Автоматизация Excel из Visual Basic

    Чтобы использовать команды 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.

    Примечание. Необходимо, чтобы в вашей системе был установлен Excel 2002. Если у вас более ранняя версия Excel, то вы можете адаптировать этот код программы к ней, но это далеко не тривиальная задача. По этой причине я не рекомендую Automation для программ, которые будут широко распространяться - особенно среди пользователей, имеющих различные версии Office.

    Создание калькулятора для выплат по закладной

  • В среде разработки отобразите форму, если она еще не отображена.
  • В верхней части формы с помощью элемента управления 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, запустите эту программу.

    Запуск программы Excel Automation

  • Щелкните на кнопке Start (Начать) стандартной панели инструментов. Появится калькулятор выплат по закладной.

    Примечание. Готовая программа Excel Automation лежит в папке c:\vbnet03sbs\Гл.13\excel automation.
  • Введите в текстовое поле Проценты число 0.09.
  • Введите в текстовое поле Месяцы число 360.
  • Введите в текстовое поле Основной долг число 150000. Ваша форма долж-на выглядеть примерно так.

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

  • Щелкните на кнопке OK окна сообщения, а затем произведите еще несколько вычислений для различных значений.
  • Когда закончите, щелкните на кнопке Закрыть строки заголовка формы.
  • Теперь попробуем выполнить упражнение Excel Automation, которое использует множество функций для работы с отображаемой книгой Excel.

    Работа с книгами Excel

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Excel Sheet Tasks. В этом упражнении используются команды Excel Automation, которые вставляют в ячейки листа числа и метки, применяют форматирование символов, вставляют функцию Sum и сохраняют книгу на диск. Используя эти базовые навыки, вы можете генерировать сложные книги Excel непосредственно из ваших приложений на Visual Basic.
  • В меню Project (Проект) щелкните на команде Add Reference (Добавить ссылку). Появится диалоговое окно Add Reference (Добавить ссылку).
  • Щелкните на закладке COM, затем в списке компонент на Microsoft Excel 10.0 Object Library, далее на кнопке Select и на OK. Если вы видите диалоговое окно первичной сборки взаимодействия, щелкните на Yes (Да).
  • Используя элемент управления Button, добавьте в форму большую кнопку.
  • Используя окно Properties (Свойства), установите свойство 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.Workbook (который основан на Excel.Application ), а третье объявление переменной ссылается на тип Excel.Worksheet (который основан на Excel.Workbook). Обратите внимание на эти важные объявления переменных и типов - они вам понадобятся при дальнейшей работе с Excel.

    Остальная часть процедуры события загружает значения в ячейки Excel. (Обратите внимание на разницу между тем, как вводятся числовые и строковые значения.) Затем в ячейку B3 вводится формула, которая использует функцию Sum для вычисления суммы ячеек B1 и B2, а результат форматируется жирным шрифтом. В этот момент процедура события отображает активный лист, и этот лист сохраняется на диск в папку c:\vbnet03sbs\Гл.13. (Если такой файл уже существует, появится диалоговое окно, спрашивающее, действительно ли вы хотите перезаписать файл.) После этого процедура события завершится, и приложение Excel остается открытым и видимым на экране, приглашая пользователя выполнить в Excel дополнительные задания. (Заметьте, что программа на Visual Basic также продолжает работать.) Программу также можно закрыть с помощью метода Quit, как это делалось в первом примере Excel Automation.

  • Чтобы сохранить проект и его файлы на диск, щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов.
  • Запуск программы Excel Sheet Tasks

  • Щелкните на кнопке Start (Начать) стандартной панели инструментов.

    Примечание. Готовая программа Excel Sheet Tasks лежит в папке c:\vbnet03sbs\Гл.13\excel sheet tasks.

    Появится простая форма вашего проекта, показанная ниже.

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

    Обратите внимание на положение и содержимое ячеек в столбцах A и B - команды Automation выполнили свою работу, и функция Sum выдала корректный результат в ячейке B3 (5000 + 75 = 5075). Текущее имя файла (myexcelsheet.xls) появляется в строке заголовка Excel.

  • Можете продолжить работу с листом Excel, а затем закройте это приложение. Заметьте, что написанная вами программа останется работать не зависимо от того, открыт Excel или нет.
  • Щелкните на кнопке Закрыть вашей программы на Visual Basic, чтобы остановить и ее.
  • Вы узнали об основных приемах автоматизации приложения Excel. Если вы захотите исследовать Automation самостоятельно, подробности об объектах приложений вы можете узнать с помощью Обозревателя объектов.

    Следующий шаг: запуск и остановка приложений Windows с помощью компоненты Process

    В лекциях 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.

    Управление работой Блокнота

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.13 новый проект с именем My Start App.
  • Отобразите форму проекта, а затем добавьте в нее с помощью элемента управления Button две кнопки.
  • Установите свойство Text объекта Button1 на значение Запустить блокнот, а свойство Text объекта Button2 на значение Остановить блокнот. Установите свойство Text формы равным Примеры запуска процесса. Теперь добавьте в проект невидимую компоненту Process, которую Visual Basic использует для управления приложением Notepad (Блокнот) во время его выполнения.
  • Щелкните на закладке Components (Компоненты) Области элементов среды Visual Studio. Эта закладка выглядит так.

    До сих пор вы использовали только закладку Windows Forms окна Toolbox (Область элементов), но закладка Components (Компоненты) также очень полезна. Она содержит компоненты .NET, которые осуществляют мониторинг событий операционной системы и среды разработки Visual Studio.

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

    Примечание. Чтобы передать запускаемому приложению аргументы командной строки, установите свойство Arguments из категории StartInfo.

    Теперь ваша форма выглядит примерно так.

  • Сделайте двойной щелчок мышью на кнопке Запустить блокнот формы, а затем введите в Редакторе кода следующий оператор программы:

    noteProcess.Start()

    Так как вы уже указали имя приложения с помощью компоненты Process, здесь его указывать не требуется. Имя объекта noteProcess содержит всю необходимую информацию.

  • Снова отобразите форму, а затем сделайте двойной щелчок мышью на кнопке Остановить блокнот.
  • Введите в Редакторе кода следующий оператор программы:

    noteProcess.CloseMainWindow()

    Метод CloseMainWindow является эквивалентом щечку на кнопке Закрыть в строке заголовка Блокнота. Если у пользователя в приложении есть несохраненный файл, то прежде, чем приложение будет закрыто, появится запрос на сохранение этого файла. (Приложение также можно закрыть с помощью метода Kill, но этот вариант не позволит сохранить изменения.)

  • Прокрутите код программы формы в самый верх, а затем введите следующие ссылки на классы:

    Imports System.Threading
    Imports System.Diagnostics

    Эти классы System используются, когда вы управляете процессами из вашего кода программы, хотя они и не требуются, если вы используете только методы Start и CloseMainWindow, как это сделал я. (Я включаю их для того, чтобы определить классы Framework, которые могут понадобиться для дальнейшего изучения этого направления.)

  • Щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов, а затем запустите программу.

    Примечание. Готовая программа Start App лежит в папке c:\vbnet03sbs\Гл.13\start app.

    Появится следующая форма.

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

  • Снова отобразите форму, а затем щелкните мышью на кнопке Остановить блокнот. Visual Basic закрое приложение, используя метод CloseMainWindow. Вы можете запускать и останавливать Notepad (Блокнот) сколько вам захочется - ваша программа теперь может управлять процессами запускаемых вами приложений, так как связывает их с объектом noteProcess.
  • Щелкните на кнопке Закрыть формы, чтобы закрыть программу.
  • Краткая справка по лекции 13

    Чтобы Сделайте следующее
    Добавить в ваш проект ссылку на компоненту или приложение, которое поддерживает 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()
    Вернуться к учебному плану