Partilhar via


Atualizar projetos do Excel e do Word que você migra para o .NET Framework 4.5

Se você tiver um projeto do Excel ou do Word que usa qualquer um dos recurso a seguir, você deve modificar seu código se a estrutura de destino for alterada para o .NET Framework 4 ou versão posterior.

Remover o atributo ExcelLocale1033 dos projetos do Excel

O Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute foi removido da parte do runtime do Visual Studio 2010 Tools for Office que é usada para soluções direcionadas ao .NET Framework 4 ou posterior. O CLR (Common Language Runtime) no .NET Framework 4 e posterior sempre passa a ID do local 1033 para o modelo de objeto do Excel, e você não pode mais usar esse atributo para desabilitar esse comportamento. Para mais informações, consulte Globalização e localização de soluções do Excel.

Para remover o ExcelLocale1033Attribute

  1. Com o projeto aberto no Visual Studio, abra o Gerenciador de Soluções.

  2. No nó Propriedades (para C#) ou no nó Meu Projeto (para Visual Basic), clique duas vezes no arquivo de código AssemblyInfo para abri-lo no editor de código.

    Observação

    Nos projetos do Visual Basic, clique no botão Mostrar Todos os Arquivos no Gerenciador de Soluções para visualizar o arquivo de código AssemblyInfo.

  3. Localize e remova o Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute do arquivo ou deixe um comentário.

    [assembly: ExcelLocale1033Proxy(true)]
    

Remover uma referência à classe ExcelLocal1033Proxy

Os projetos criados usando o Microsoft Visual Studio 2005 Tools for the Microsoft Office System instanciam o objeto do Excel Application usando a classe Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy. Esta classe foi removida da parte do runtime do Visual Studio 2010 Tools for Office que é usada para soluções direcionadas ao .NET Framework 4 ou posterior. Portanto, você deve remover ou comentar a linha de código que faz referência a essa classe.

Para remover a referência à classe ExcelLocal1033Proxy

  1. Abra o projeto no Visual Studio e, depois, inicie o Gerenciador de Soluções.

  2. No Gerenciador de Soluções, abra o menu de atalho para ThisAddin.cs (para C#) ou ThisAddin.vb (para Visual Basic) e escolha Exibir Código.

  3. No Editor de Códigos, na região VSTO generated code, remova ou comente a seguinte linha de código.

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

Atualizar o código que usa os métodos GetVstoObject e HasVstoObject

Em projetos direcionados ao .NET Framework 3.5, os métodos GetVstoObject ou HasVstoObject estão disponíveis como métodos de extensão em um dos seguintes objetos nativos no seu projeto: Document, Workbook, Worksheet ou ListObject. Ao chamar esses métodos, você não precisa passar um parâmetro. O exemplo de código a seguir demonstra como usar o método GetVstoObject em um suplemento do Word VSTO direcionado ao .NET Framework 3.5.

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

Em projetos direcionados ao .NET Framework 4 ou posterior, você deve modificar seu código para acessar esses métodos de uma das seguintes maneiras:

  • Você ainda pode acessar esses métodos como métodos de extensão em objetos Document, Workbook, Worksheet ou ListObject. No entanto, agora você deve passar o objeto retornado pela propriedade Globals.Factory para esses métodos.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • Como alternativa, você pode acessar esses métodos no objeto retornado pela propriedade Globals.Factory. Ao acessar esses métodos dessa maneira, você deve passar o objeto nativo que deseja estender para o método.

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

    Para mais informações, consulte Estender documentos do Word e pastas de trabalho do Excel em suplementos do VSTO no runtime.

Atualizar código que usa instâncias das classes geradas em projetos no nível do documento

Em projetos de nível de documento direcionados ao .NET Framework 3.5, as classes geradas nos projetos derivam das seguintes classes no runtime do Visual Studio Tools for Office:

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheet n: Worksheet

  • Chart n: ChartSheet

    Em projetos direcionados ao .NET Framework 4 ou posterior, os tipos no runtime do Visual Studio Tools for Office listados acima são interfaces em vez de classes. As classes geradas em projetos direcionados ao .NET Framework 4 ou posterior derivam das seguintes novas classes no runtime do Visual Studio Tools for Office:

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheet n: WorksheetBase

  • Chart n: ChartSheetBase

    Se o código em seu projeto se referir a uma instância de uma das classes geradas como a classe base da qual ele deriva, você deverá modificar o código.

    Por exemplo, em um projeto de pasta de trabalho do Excel direcionado ao .NET Framework 3.5, você pode ter um método auxiliar que executa algum trabalho em instâncias das classes Sheetn geradas no seu projeto.

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

Se você redirecionar o projeto para o .NET Framework 4 ou posterior, deverá fazer uma das seguintes alterações em seu código:

  • Modifique qualquer código que chame o método DoSomethingToSheet para passar a propriedade Base de um objeto WorksheetBase no seu projeto. Essa propriedade retorna um objeto Worksheet.

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modifique o parâmetro do método DoSomethingToSheet para esperar um objeto WorksheetBase.

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

Atualizar o código que usa controles do Windows Forms em documentos

Adicione uma declaração using (C#) ou Imports (Visual Basic) ao namespace Microsoft.Office.Tools.Excel ou Microsoft.Office.Tools.Word na parte superior de qualquer arquivo de código que use a propriedade Controls para adicionar controles do Windows Forms ao documento ou planilha programaticamente.

Em projetos direcionados ao .NET Framework 3.5, os métodos que adicionam controles do Windows Forms (como o método AddButton) são definidos nas classes ControlCollection e ControlCollection.

Em projetos direcionados ao .NET Framework 4 ou posterior, esses métodos são métodos de extensão disponíveis na propriedade Controls. Para usar esses métodos de extensão, o arquivo de código no qual você usa os métodos deve ter uma declaração using ou Imports para o namespace Microsoft.Office.Tools.Excel ou Microsoft.Office.Tools.Word. Essa instrução é gerada automaticamente em novos projetos direcionados ao .NET Framework 4 ou posterior. No entanto, essa instrução não é adicionada automaticamente em projetos direcionados ao .NET Framework 3.5, portanto, você deve adicioná-la ao redirecionar o projeto.

Para obter mais informações, consulte Adicionar controles a documentos do Office em tempo de execução.

Atualizar o código que manipula eventos de controle de conteúdo do Word

Em projetos direcionados ao .NET Framework 3.5, os eventos de controles de conteúdo do Word são manipulados pelo delegado genérico EventHandler<TEventArgs>. Em projetos direcionados ao .NET Framework 4 ou posterior, esses eventos são manipulados por outros delegados.

A tabela a seguir lista os eventos de controle de conteúdo do Word e os delegados associados a eles em projetos direcionados ao .NET Framework 4 ou posterior.

Evento Delegar para uso em .NET Framework 4 e projetos posteriores
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Atualizar o código que usa as classes OLEObject e OLEControl

Em projetos direcionados ao .NET Framework 3.5, você pode adicionar controles personalizados (como controles de usuário do Windows Forms) a um documento ou planilha usando as classes Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl.

Em projetos direcionados ao .NET Framework 4 ou posterior, essas classes foram substituídas pelas interfaces ControlSite e ControlSite. Você deve modificar o código que se refere a Microsoft.Office.Tools.Excel.OLEObject e Microsoft.Office.Tools.Word.OLEControl para se referir a ControlSite e ControlSite. Além dos novos nomes, esses controles se comportam da mesma maneira que em projetos direcionados ao .NET Framework 3.5.

Para obter mais informações, consulte Adicionar controles a documentos do Office em tempo de execução.

Atualizar o código que usa a propriedade Controls.Item(Object)

Em projetos direcionados ao .NET Framework 3.5, você pode usar a propriedade Item(Object) de Microsoft.Office.Tools.Word.Document.Controls ou da coleção Microsoft.Office.Tools.Excel.Worksheet.Controls para determinar se um documento ou planilha tem um controle especificado.

Em projetos direcionados ao .NET Framework 4 ou posterior, a propriedade Item(Object) foi removida dessas coleções. Para determinar se um documento ou planilha contém um controle especificado, use o método Contains(System.Object) da coleção Controls ou Controls.

Para mais informações sobre a coleção Controls de documentos e planilhas, consulte Adicionar controles a documentos do Office em runtime.

Atualizar código que usa coleções derivadas de CollectionBase

Em projetos direcionados ao .NET Framework 3.5, vários tipos de coleção no runtime do Visual Studio Tools for Office derivam da classe CollectionBase, como Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollection e Microsoft.Office.Tools.Word.ControlCollection.

Em projetos direcionados ao .NET Framework 4 ou posterior, esses tipos de coleção agora são interfaces que não derivam de CollectionBase. Alguns membros não estão mais disponíveis nesses tipos de coleção, como Capacity, List e InnerList.