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


Обновление проектов Excel и Word, перенесенных на платформа .NET Framework 4.5

Если у вас есть проект Excel или Word, использующий любую из следующих функций, необходимо изменить код, если целевая платформа изменена на платформа .NET Framework 4 или более поздней версии:

Удаление атрибута ExcelLocale1033 из проектов Excel

Она Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute была удалена из части среды выполнения Visual Studio 2010 для Office, которая используется для решений, предназначенных для платформа .NET Framework 4 или более поздней версии. Среда CLR (CLR) в платформа .NET Framework 4 и более поздних версиях всегда передает идентификатор языкового стандарта 1033 в объектную модель Excel, и вы больше не можете использовать этот атрибут для отключения этого поведения. Дополнительные сведения см. в статье "Глобализация и локализация решений Excel".

Удаление ExcelLocale1033Attribute

  1. Откройте проект в Visual Studio, а затем откройте Обозреватель решений.

  2. В узле Свойства (для C#) или Мой проект (для Visual Basic) дважды щелкните файл кода AssemblyInfo, чтобы открыть его в редакторе кода.

    Примечание.

    В проектах Visual Basic для просмотра файла с кодом AssemblyInfo необходимо нажать кнопку Показать все файлы в обозревателе решений .

  3. Найдите Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute и удалите его из файла или закомментируйте его.

    [assembly: ExcelLocale1033Proxy(true)]
    

Удаление ссылки на класс ExcelLocal1033Proxy

Проекты, созданные с помощью набора средств Microsoft Visual Studio 2005 для системы Microsoft Office, создают экземпляр объекта Application Excel с помощью класса Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy. Этот класс был удален из части среды выполнения Visual Studio 2010 tools for Office, которая используется для решений, предназначенных для платформа .NET Framework 4 или более поздней версии. Таким образом, необходимо удалить или закомментировать строку кода, которая ссылается на этот класс.

Удаление ссылки на класс ExcelLocal1033Proxy

  1. Откройте проект в Visual Studio, а затем откройте Обозреватель решений.

  2. В Обозреватель решений откройте контекстное меню для ThisAddin.cs (для C#) или ThisAddin.vb (для Visual Basic), а затем выберите "Просмотреть код".

  3. В редакторе кода в области VSTO generated code удалите или закомментируйте следующую строку кода.

    this.Application = (Excel.Application)Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Wrap(typeof(Excel.Application), this.Application);
    
    

Обновление кода, использующего методы GetVstoObject и HasVstoObject

В проектах, предназначенных для .NET Framework 3.5, методы GetVstoObject и HasVstoObject доступны как методы расширения в одном из следующих собственных объектов проекта: Document, Workbook, Worksheet или ListObject. При вызове этих методов передавать параметр не требуется. В следующем примере кода показано, как использовать метод GetVstoObject в надстройке VSTO Word, предназначенной для платформа .NET Framework 3.5.

Microsoft.Office.Tools.Word.Document vstoDocument =
    Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject();

В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, необходимо изменить код для доступа к этим методам одним из следующих способов:

  • Вы по-прежнему можете обратиться к этим методам как к методам расширения в объектах Document, Workbook, Worksheetи ListObject . Однако теперь этим методам необходимо передать объект, возвращаемый свойством Globals.Factory.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • Можно также обратиться к этим методам в объекте, который возвращается свойством Globals.Factory. При таком доступе к этим методам необходимо передать методу собственный объект, который требуется расширить до метода.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument);
    

    Дополнительные сведения см. в разделе "Расширение документов Word" и книг Excel в надстройках VSTO во время выполнения.

Обновление кода, использующего экземпляры созданных классов в проектах уровня документа

В проектах уровня документа, предназначенных для платформа .NET Framework 3.5, созданные классы в проектах являются производными от следующих классов в среде выполнения набор средств Visual Studio для Office:

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn:Worksheet

  • Chartn:ChartSheet

    В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, типы в набор средств Visual Studio для Office среде выполнения, перечисленные выше, являются интерфейсами, а не классами. Созданные классы в проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, являются производными от следующих новых классов в среде выполнения набор средств Visual Studio для Office:

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn:WorksheetBase

  • Chartn:ChartSheetBase

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

    Например, в проекте книги Excel, ориентированном на .NET Framework 3.5, может присутствовать вспомогательный метод, который выполняет некоторые операции с экземплярами созданных классов Sheetn в проекте.

private void DoSomethingToSheet(Microsoft.Office.Tools.Excel.Worksheet worksheet)
{
    // Do something to the worksheet object.
}

При перенацелив проект на платформа .NET Framework 4 или более поздней версии, необходимо внести одно из следующих изменений в код:

  • Измените любой код, который вызывает метод DoSomethingToSheet для передачи свойства Base объекта WorksheetBase в проекте. Это свойство возвращает объект Worksheet .

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Измените параметр метода DoSomethingToSheet так, чтобы он принимал объект WorksheetBase .

    private void DoSomethingToSheet (Microsoft.Office.Tools.Excel.WorksheetBase worksheet)
    {
        // Do something to the worksheet object.
    }
    

Обновление кода, использующего элементы управления Windows Forms в документах

Необходимо добавить инструкцию using (C#) или Import (Visual Basic) для Microsoft.Office.Tools.Excel пространства имен или Microsoft.Office.Tools.Word пространства имен в верхнюю часть любого файла кода, использующего свойство Controls для добавления элементов управления Windows Forms в документ или лист программным способом.

В проектах, ориентированных на .NET Framework 3.5, методы, добавляющие элементы управления Windows Forms (такие как AddButton), определяются в классах ControlCollection и ControlCollection.

В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, эти методы являются методами расширения, доступными в свойстве Controls. Чтобы использовать эти методы расширения, файл кода, в котором используются методы, должен содержать оператор using и Imports для пространства имен Microsoft.Office.Tools.Excel и Microsoft.Office.Tools.Word . Эта инструкция создается автоматически в новых проектах, предназначенных для платформа .NET Framework 4 или более поздней версии. Однако этот оператор не добавляется автоматически в проектах, ориентированных на .NET Framework 3.5, поэтому вам необходимо добавить его при изменении целевой платформы проекта.

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

Обновление кода, обрабатывающего события управления содержимым Word

В проектах, ориентированных на .NET Framework 3.5, события элементов управления содержимым Word обрабатываются универсальным делегатом EventHandler<TEventArgs> . В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, эти события обрабатываются другими делегатами.

В следующей таблице перечислены события управления содержимым Word и делегаты, связанные с ними в проектах, предназначенных для платформа .NET Framework 4 или более поздней версии.

Мероприятие Делегирование использования в проектах платформа .NET Framework 4 и более поздних версий
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Обновление кода, использующего классы OLEObject и OLEControl

В проектах, ориентированных на .NET Framework 3.5, можно добавить пользовательские элементы управления (например, элементы управления Windows Forms) в документ или на лист с помощью классов Microsoft.Office.Tools.Excel.OLEObject и Microsoft.Office.Tools.Word.OLEControl.

В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, эти классы были заменены ControlSite интерфейсами и ControlSite интерфейсами. Вам необходимо изменить код, который ссылается на Microsoft.Office.Tools.Excel.OLEObject и Microsoft.Office.Tools.Word.OLEControl так, чтобы он ссылался на ControlSite и ControlSite. За исключением новых имен, эти элементы управления ведут себя так же, как и в проектах, ориентированных на .NET Framework 3.5.

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

Обновление кода, использующего свойство Controls.Item(Object)

В проектах, предназначенных для платформа .NET Framework 3.5, можно использовать свойство Item(Object) microsoft.Office.Tools.Word.Document.Controls или Microsoft.Office.Tools.Excel.Worksheet.Controls коллекцию, чтобы определить, имеет ли документ или лист указанный элемент управления.

В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, свойство Item(Object) было удалено из этих коллекций. Чтобы определить, содержит ли документ или лист указанный элемент управления, используйте вместо него метод Controls Controls Contains(System.Object).

Дополнительные сведения о коллекции элементов управления документов и листов см. в статье "Добавление элементов управления в документы Office во время выполнения".

Обновление кода, использующего коллекции, производные от CollectionBase

В проектах, предназначенных для платформа .NET Framework 3.5, несколько типов коллекций в среде выполнения набор средств Visual Studio для Office являются производными от CollectionBase класса, например Microsoft.Office.Tools.SmartTagCollectionMicrosoft.Office.Tools.Excel.ControlCollection, и Microsoft.Office.Tools.Word.ControlCollection.

В проектах, предназначенных для платформа .NET Framework 4 или более поздней версии, эти типы коллекций теперь являются интерфейсами, которые не являются производными от CollectionBase. Некоторые члены в этих типах коллекций, такие как Capacity, Listи InnerList, больше не доступны.