Поделиться через


Пошаговое руководство. Программирование Office на Visual Basic

Visual Studio предлагает функции в Visual Basic, которые улучшают программирование в Microsoft Office. Список функций Visual Basic включает автоматически реализуемые свойства, инструкции в лямбда-выражениях и инициализаторы коллекций. Вы можете внедрить сведения о типах, что позволяет развертывать сборки, взаимодействующие с com-компонентами, без развертывания основных сборок взаимодействия (PIA) на компьютере пользователя. Дополнительные сведения см. в разделе Пошаговое руководство: внедрению типов из управляемых сборок.

В данном пошаговом руководстве эти возможности показаны в контексте программирования для Microsoft Office, но многие из них могут оказаться полезными и в других ситуациях. В этом пошаговом руководстве вы создадите книгу Excel с помощью надстройки Excel, а затем документ Word со ссылкой на эту книгу. Наконец, вы узнаете, как включать и отключать зависимость PIA.

Предварительные требования

Для выполнения данного пошагового руководства на компьютере должны быть установлены Microsoft Office Excel и Microsoft Office Word.

Примечание

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.

Настройка приложения надстройки Excel

  1. Запустите Visual Studio.

  2. В меню Файл выберите пункт Создать, а затем команду Проект.

  3. В области Установленные шаблоны разверните узел Visual Basic, узел Office, а затем выберите год версии продукта Office.

  4. В области Шаблоны щелкните Надстройка версии> Excel<.

  5. Убедитесь, что в верхней части области Шаблоны в поле Требуемая версия .NET Framework отображается .NET Framework 4 или более поздняя версия.

  6. Если нужно, в поле Имя введите имя проекта.

  7. Нажмите кнопку ОК.

  8. В обозревателе решений появится новый проект.

Добавление ссылок

  1. В обозревателе решений щелкните имя проекта правой кнопкой мыши и выберите пункт Добавить ссылку. Откроется диалоговое окно Добавление ссылки.

  2. На вкладке Сборки в списке Имя компонента выберите Microsoft.Office.Interop.Excel, версия <version>.0.0.0 (расшифровку номеров версий продуктов Office см. в разделе Версии Майкрософт), а затем, удерживая нажатой клавишу CTRL, выберите Microsoft.Office.Interop.Word, version <version>.0.0.0. Если сборки отсутствуют, может потребоваться проверить, что они установлены и отображаются (см. раздел Практическое руководство. Установка основных сборок взаимодействия Microsoft Office).

  3. Нажмите кнопку ОК.

Добавление необходимых инструкций Imports или директив using

  1. В обозревателе решений щелкните правой кнопкой мыши файл ThisAddIn.vb или ThisAddIn.cs и выберите в контекстном меню команду Просмотреть код.

  2. Добавьте следующие Imports операторы в начало файла кода, если их еще нет.

    Imports Microsoft.Office.Interop
    

Создание списка банковских счетов

  1. В обозревателе решений щелкните правой кнопкой мыши имя проекта, выберите в контекстном меню команду Добавить, а затем щелкните пункт Класс. Назовите класс Account.vb. Нажмите кнопку Добавить.

  2. Замените определение класса Account следующим кодом. В определениях классов используются автоматически реализуемые свойства. Дополнительные сведения см. в разделе Автоматически реализуемые свойства.

    Public Class Account
        Property ID As Integer = -1
        Property Balance As Double
    End Class
    
  3. Чтобы создать bankAccounts список, содержащий две учетные записи, добавьте следующий код ThisAddIn_Startup в метод ThisAddIn.vb. В объявлениях списков используются инициализаторы коллекций. Дополнительные сведения см. в разделе Инициализаторы коллекций.

    Dim bankAccounts As New List(Of Account) From {
        New Account With {
                              .ID = 345,
                              .Balance = 541.27
                         },
        New Account With {
                              .ID = 123,
                              .Balance = -127.44
                         }
        }
    

Экспорт данных в Excel

  1. В том же самом файле добавьте в класс ThisAddIn следующий метод. Этот метод служит для настройки книги Excel и экспорта данных в нее.

    Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account),
                   ByVal DisplayAction As Action(Of Account, Excel.Range))
    
        With Me.Application
            ' Add a new Excel workbook.
            .Workbooks.Add()
            .Visible = True
            .Range("A1").Value = "ID"
            .Range("B1").Value = "Balance"
            .Range("A2").Select()
    
            For Each ac In accounts
                DisplayAction(ac, .ActiveCell)
                .ActiveCell.Offset(1, 0).Select()
            Next
    
            ' Copy the results to the Clipboard.
            .Range("A1:B3").Copy()
        End With
    End Sub
    
    • У метода Add есть необязательный параметр для указания конкретного шаблона. Необязательные параметры позволяют опустить аргумент для этого параметра, если вы хотите использовать значение параметра по умолчанию. Поскольку в предыдущем примере никакой аргумент не передается, в методе Add используется шаблон по умолчанию и создается новая книга.

    • Свойства Range и Offset объекта Range используют возможность индексированных свойств. Кроме того, индексированные свойства позволяют использовать свойство Value объекта Range, устраняя необходимость в использовании свойства Value2. Свойство Value является индексированным, но индекс — необязательным. Совместная работа необязательных аргументов и индексированных свойств показана в следующем примере.

  2. Добавьте в конец метода DisplayInExcel следующий код, чтобы ширина столбца изменялась в соответствии с содержимым.

    ' Add the following two lines at the end of the With statement.
    .Columns(1).AutoFit()
    .Columns(2).AutoFit()
    

    Дополнительные сведения о внедрении типов взаимодействия см. в процедурах "Поиск справочника по PIA" и "Восстановление зависимости PIA" далее в этой статье.

Вызов DisplayInExcel

  1. Добавьте следующий код в конец метода ThisAddIn_StartUp. Вызов метода DisplayInExcel содержит два аргумента. Первый аргумент представляет собой имя списка счетов, которые требуется обработать. Второй аргумент — это состоящее из нескольких строк лямбда-выражение, которое определяет, каким образом следует обрабатывать данные. Значения ID и balance для каждого из счетов отображаются в соседних ячейках, а если баланс имеет отрицательное значение, строка отображается красным.

    DisplayInExcel(bankAccounts,
           Sub(account, cell)
               ' This multiline lambda expression sets custom
               ' processing rules for the bankAccounts.
               cell.Value = account.ID
               cell.Offset(0, 1).Value = account.Balance
    
               If account.Balance < 0 Then
                   cell.Interior.Color = RGB(255, 0, 0)
                   cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0)
               End If
           End Sub)
    
  2. Чтобы запустить программу, нажмите клавишу F5. Появится книга Excel, содержащая данные о счетах.

Добавление документа Word

  1. Добавьте в конец метода ThisAddIn_StartUp следующий код, чтобы создать документ Word, содержащий ссылку на книгу Excel.

    Dim wordApp As New Word.Application
    wordApp.Visible = True
    wordApp.Documents.Add()
    wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
    

    Метод PasteSpecial имеет семь параметров, которые определены как необязательные ссылочные параметры. Именованные и необязательные аргументы позволяют определять параметры, к которым требуется обращаться по имени, и передавать аргументы только для этих параметров. В этом примере аргументы передаются, чтобы показать, что необходимо создать ссылку на книгу в буфере (параметр Link) и что эта ссылка должна отображаться в документе Word в виде значка (параметр DisplayAsIcon).

Выполнение приложения

  1. Нажмите клавишу F5 для запуска приложения. Будет запущено приложение Excel, в котором будет открыта таблица, содержащая сведения о двух счетах из списка bankAccounts. Затем будет открыт документ Word, содержащий ссылку на таблицу Excel.

Очистка завершенного проекта

  1. В Visual Studio в меню Построение выберите пункт Очистить решение. В противном случае надстройка будет запускаться при каждом открытии Excel на компьютере разработчика.

Поиск справочника по PIA

  1. Запустите приложение снова, но не выбирайте пункт Очистить решение.

  2. Выберите кнопку Пуск. Найдите версию> Microsoft Visual Studio < и откройте командную строку разработчика.

  3. В окне командной строки разработчика для Visual Studio введите команду ildasm, а затем нажмите клавишу ВВОД. Появится окно программы IL DASM.

  4. В меню Файл в окне IL DASM выберите пункт Файл>Открыть. Дважды щелкните Версию> Visual Studio<, а затем дважды щелкните Проекты. Откройте папку проекта и найдите в папке bin/Debug файл имя_проекта.dll. Дважды щелкните файл имя_проекта.dll. В новом окне будут показаны атрибуты проекта, а также ссылки на другие модули и сборки. Обратите внимание, что в сборку включены пространства имен Microsoft.Office.Interop.Excel и Microsoft.Office.Interop.Word. По умолчанию в Visual Studio компилятор импортирует в сборку необходимые типы из сборки PIA, на которую указывает ссылка.

    Дополнительные сведения см. в разделе Практическое руководство. просмотреть одержимое сборки.

  5. Дважды щелкните значок МАНИФЕСТ. Откроется окно со списком сборок, содержащих элементы, на которые имеются ссылки в проекте. Сборки Microsoft.Office.Interop.Excelи Microsoft.Office.Interop.Word не будут указаны в этом списке. Поскольку необходимые для проекта типы были импортированы в сборку проекта, ссылки на сборки PIA не требуется. Это упрощает развертывание. Сборки PIA не обязательно должны присутствовать на компьютере пользователя, а поскольку приложение не требует развертывания конкретной версии сборки PIA, можно разрабатывать приложения, которые работают с различными версиями Office, если в этих версиях имеются все необходимые интерфейсы API.

    Поскольку развертывать сборки PIA больше не требуется, можно создавать приложения для применения в сложных сценариях, чтобы эти приложения работали с несколькими версиями Office, включая и более ранние версии. Тем не менее это возможно только в том случае, если в коде не используются интерфейсы API, которые недоступны в используемой версии Office. Разработчик не всегда знает, был ли доступен тот или иной интерфейс API в более ранней версии, поэтому работать с более ранними версиями Office не рекомендуется.

    Примечание

    До Office 2003 сборки PIA не публиковались. Поэтому единственными способом создания сборки взаимодействия в Office 2002 или более ранних версиях является импорт ссылки COM.

  6. Закройте окно манифеста и окно сборки.

Восстановление зависимости PIA

  1. В обозревателе решений нажмите кнопку Показать все файлы. Разверните папку Ссылки и выберите Microsoft.Office.Interop.Excel. Нажмите клавишу F4, чтобы открыть окно Свойства.
  2. В окне Свойства измените значение свойства Внедрить типы взаимодействия с True на False.
  3. Повторите шаги 1 и 2 этой процедуры для сборки Microsoft.Office.Interop.Word.
  4. Нажмите клавишу F5, чтобы проверить, что проект по-прежнему выполняется правильно.
  5. Повторите шаги 1–3 из предыдущей процедуры, чтобы открыть окно сборки. Обратите внимание, что сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel больше не входят в список внедренных сборок.
  6. Дважды щелкните значок МАНИФЕСТ и просмотрите список сборок, на которые имеются ссылки. В списке будут указаны сборки Microsoft.Office.Interop.Word и Microsoft.Office.Interop.Excel. Поскольку приложение содержит ссылки на сборки PIA Excel и Word, а свойство Внедрить типы взаимодействия имеет значение False, на компьютере пользователя должны храниться обе сборки.
  7. В Visual Studio в меню Построение выберите пункт Очистить решение, чтобы очистить завершенный проект.

См. также