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


Обновление Visual Studio Tools для Office, версия 2003

Обновлен: Ноябрь 2007

После перехода с Visual Studio Tools for Office, версия 2003 на Microsoft Visual Studio 2005 Tools for Office (Visual Studio Tools for Office) необходимо вручную выполнить некоторые шаги обновления для проектов на уровне документа.

В новой системе проектов существенно изменились шаблоны кода проекта. Обновленный проект будет иметь новую структуру, но код останется в исходном файле кода, основанном на старом шаблоне кода проекта. Чтобы решение можно было запустить сразу после обновления, новый класс проекта создает экземпляр старого импортированного класса (т. е. исходного класса с именем по умолчанию OfficeCodeBehind). Для выполнения полного обновления необходимо переместить код из старого класса OfficeCodeBehind в новый документ, книгу или класс листа, как описано в этом разделе.

Новая система и структура проектов

Система проектов в Visual Studio Tools for Office, версия 2003 имела один основной файл класса для кода. Новая система проектов в Обозревателе решений имеет структуру контейнеров, представляющую документ или рабочую книгу. Файлы класса для кода содержатся в структуре контейнеров. Под этими файлами класса располагаются скрытые файлы, которые содержат код, сгенерированный Visual Studio Tools for Office. Код в скрытых файлах не следует изменять, так как они могут быть сгенерированы заново во время разработки, что приведет к потере внесенных изменений.

Проекты книг и шаблонов Excel

Проекты книг и шаблонов Excel теперь содержат отдельный файл класса для каждого листа и один файл класса для всей книги в целом. Специфичный для листа код (например, код, реагирующий на элемент управления в листе) необходимо помещать в класс листа. Для новых документов эти классы по умолчанию называются Sheet1.vb или Sheet1.cs, Sheet2.vb или Sheet2.cs и т. д. Код, затрагивающий рабочую книгу в целом (например, событие книги Open, событие BeforeClose и код панели действий), необходимо размещать в классе книги. По умолчанию этот класс называется ThisWorkbook.vb или ThisWorkbook.cs.

Проекты документов и шаблонов Word

Проекты документов и шаблонов Word имеют один файл кода, который содержит весь код, относящийся к документу. По умолчанию этот класс называется ThisDocument.vb или ThisDocument.cs.

Дополнительные сведения см. в разделе Шаблоны проектов Office.

Процесс обновления

При обновлении проекта Visual Studio выполняет следующие действия:

  • Обновление проекта новым форматом файла и структурой проекта.

  • Копирование существующего документа в папку проекта.

  • Удаление пользовательских свойств документа _AssemblyName0 и _AssemblyLocation0. Это предотвращает запуск существующих расширений управляемого кода (пользовательские свойства будут снова добавлены при сборке проекта).

  • Добавление исходного основного файла кода, включая комментарии, объясняющие выполненные действия, а также изменение имени файла с <ИмяДокумента> на <ИмяДокумента>(old).

  • Добавление всех файлов исходного проекта к новому проекту.

  • Добавление всех существующих ссылок к новому проекту.

Существующий код не переносится в новые классы. Вместо этого метод _Startup старого основного класса вызывается из метода Startup нового основного класса. Это приводит к созданию экземпляра старого класса, чтобы решение выполнялось так же, как и в старой версии.

Именем класса по умолчанию в <DocumentName>(old) является OfficeCodeBehind. В обновленных проектах Word именем основного класса по умолчанию является ThisDocument. В обновленных проектах Excel именами основных классов по умолчанию являются ThisWorkbook для класса, который содержит код, выполняемый на уровне книги, и Sheet1, Sheet2 и т. д. для кода, выполняемого на уровне листа.

Для завершения обновления необходимо выполнить следующие действия:

  • Вручную переместить код из старого класса (с именем по умолчанию OfficeCodeBehind) в новый документ, рабочую книгу и классы листа, а затем удалить старый файл кода. В то же время, если требуется просто сохранить существующий код в исходном виде, можно оставить старый файл кода и запускать код путем вызова из новых классов. Любой код, вновь добавляемый средствами, будет размещен в новых классах.

  • Обновить код, как описано ниже.

  • Заменить все элементы управления ActiveX управляемыми элементами управления.

Можно также выполнить следующее:

  • Реструктурировать код C#.

Перемещение кода из старого основного класса в новый класс

Рекомендуется переместить код из старого класса в новые, чтобы иметь возможность пользоваться средствами Visual Studio. Средства автоматически используют новые классы при генерации кода. Например, если на кнопке, добавленной к документу, выполняется двойной щелчок для перехода к коду, то обработчик событий по умолчанию добавляется к новому классу.

При обновлении решения Excel следует решить, какой класс должен содержать каждый из перемещаемых методов. Если метод в основном относится к рабочей книге и/или ко всем листам, необходимо поместить код в класс ThisWorkbook. Если код относится к одному листу (например, код для элемента управления на листе), код следует поместить в соответствующий класс листа.

Чтобы облегчить процесс переноса, сгенерированный код в новых классах ThisDocument или ThisWorkbook содержит методы-заполнители с комментариями. Эти методы можно использовать одним из следующих способов:

  • переместить весь код из старого класса в новые классы, предоставленные в обновленном решении;

  • написать в новых методах код для вызова старых методов старого класса. Для этого необходимо изменить методы старого класса, чтобы они не были закрытыми.

Примеры

Ниже приведены примеры методов-заполнителей, которые создают экземпляр старого класса и вызывают его методы:

Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

    OldCode = New OfficeCodeBehind()
    OldCode._Startup(Me.ThisApplication, Me)
End Sub

''Private Sub ThisDocument_Open() Handles MyBase.Open
''    OldCode.ThisDocument_Open()
''End Sub
''
''Private Sub ThisDocument_Close() Handles MyBase.CloseEvent
''    OldCode.ThisDocument_Close()
''End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
    OldCode = new OfficeCodeBehind();
    OldCode._Startup(this.Application, this);
}

//private void ThisDocument_Open()
//{
//    OldCode.ThisDocument_Open()
//}
//
//private void ThisDocument_Close(ref bool Cancel)
//{
//    OldCode.ThisDocument_Close(ref Cancel)
//}

После того как весь код был перемещен в новые классы, следует удалить старый класс.

Обновление кода

Если существующий код ссылается на Application, вызывает определенные события или методы или зависит от события Open, необходимо внести в него некоторые изменения.

Уточнение приложения

В Visual Studio Tools for Office, версия 2003 неполное использование Application относилось к типу System.Windows.Forms.Application. В Visual Studio Tools for Office оно относится к объекту Application для Word или Excel. Это обозначает, что необходимо обновить все неполные ссылки на Application полным пространством имен System.Windows.Forms.Application для получения того же результата. Например, если для открытия формы используется код вида Application.Run(New Form1), его необходимо заменить на System.Windows.Forms.Application.Run(New Form1).

Переименование событий и свойств

Word и Excel предоставляют некоторые события, одноименные с методами в объектной модели. Например, документы Word имеют событие Close и метод Close. Код решения Visual Studio Tools for Office требует указания другого имени для одного из элементов; необходимо заменить любые существующие ссылки на следующие элементы новыми именами.

Word.Document

  • Для события Close следует использовать CloseEvent.

  • Для события Sync следует использовать SyncEvent.

Excel.Worksheet

  • Для события Activate следует использовать ActivateEvent.

  • Для метода Calculate следует использовать CalculateMethod.

Excel.Workbook

  • Для события Activate следует использовать ActivateEvent.

  • Для события Sync следует использовать SyncEvent.

Excel.Chart

  • Для события Activate следует использовать ActivateEvent.

  • Для события Select следует использовать SelectEvent.

Обработка события Open

Обновленные проекты не вызывают события Open для рабочих книг Excel и события Open для документов Word. Если код зависит от события Open, необходимо переместить его в обработчик событий ThisWorkbook_Open() в новом классе ThisWorkbook для рабочих книг Excel, или в обработчик событий ThisDocument_Open() в новом классе ThisDocument для документов Word. Обработчик событий Open можно также вызвать из метода _Startup исходного класса OfficeCodeBehind.

Замена элементов управления ActiveX управляемыми элементами управления

Если в документе или рабочей книге использовались элементы управления ActiveX, необходимо удалить их и заменить управляемыми элементами управления из Панели элементов Visual Studio. Элементы управления ActiveX имеют ограничения в новых проектах Visual Studio Tools for Office: например, к элементам управления ActiveX невозможно привязать данные, а для выполнения кода с ними необходимо использовать специальную сборку взаимодействия. Поэтому элементы управления ActiveX не поддерживаются в новых проектах Visual Studio Tools for Office.

Оптимизация кода (только C#)

Visual Studio предоставляет средства для организации и оптимизации кода C#. Этот процесс называется "оптимизация". Содержащее эти средства меню Рефакторинг добавляется в Visual Studio при открытии файла кода в редакторе кода. Дополнительные сведения см. в разделе Оптимизация.

См. также

Задачи

Практическое руководство. Обновление решений Visual Studio для Office

Основные понятия

Общие сведения об использовании сборок в решениях Office

Обновление и перенос решений Office