Mettre à jour des projets Excel et Word que vous migrez vers .NET Framework 4.5

Si vous disposez d’un projet Excel ou Word qui utilise l’une des fonctionnalités suivantes, vous devez modifier votre code si le framework cible est remplacé par .NET Framework 4 ou version ultérieure :

Supprimer l’attribut ExcelLocale1033 des projets Excel

La Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute partie des outils Visual Studio 2010 pour Bureau runtime utilisé pour les solutions qui ciblent .NET Framework 4 ou version ultérieure a été supprimée. Le Common Language Runtime (CLR) dans .NET Framework 4 et versions ultérieures passe toujours l’ID de paramètres régionaux 1033 au modèle objet Excel, et vous ne pouvez plus utiliser cet attribut pour désactiver ce comportement. Pour plus d’informations, consultez Globalisation et localisation des solutions Excel.

Pour supprimer l'attribut ExcelLocale1033

  1. Le projet étant ouvert dans Visual Studio, ouvrez l' Explorateur de solutions.

  2. Sous le nœud Propriétés (pour C#) ou le nœud My Project (pour Visual Basic), double-cliquez sur le fichier de code AssemblyInfo pour l'ouvrir dans l'éditeur de code.

    Remarque

    Dans les projets Visual Basic, vous devez cliquer sur le bouton Afficher tous les fichiers de l' Explorateur de solutions pour afficher le fichier de code AssemblyInfo.

  3. Recherchez le Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute et supprimez-le du fichier ou commentez-le.

    [assembly: ExcelLocale1033Proxy(true)]
    

Supprimer une référence à la classe ExcelLocal1033Proxy

Les projets qui ont été créés à l'aide de Microsoft Visual Studio 2005 Tools pour Microsoft Office System instancient l'objet Excel Application à l'aide de la classe Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy. Cette classe a été supprimée de la partie de Visual Studio 2010 Tools pour Bureau runtime utilisé pour les solutions qui ciblent .NET Framework 4 ou version ultérieure. Par conséquent, vous devez supprimer ou commenter la ligne de code qui fait référence à cette classe.

Pour supprimer la référence à la classe ExcelLocal1033Proxy

  1. Ouvrez le projet dans Visual Studio, puis ouvrez l' Explorateur de solutions.

  2. Dans Explorateur de solutions, ouvrez le menu contextuel pour ThisAddin.cs (pour C#) ou ThisAddin.vb (pour Visual Basic), puis choisissez Afficher le code.

  3. Dans l'éditeur de code, dans la région VSTO generated code , supprimez ou commentez la ligne de code suivante.

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

Mettre à jour le code qui utilise les méthodes GetVstoObject et HasVstoObject

Dans les projets qui ciblent le .NET Framework 3.5, les méthodes GetVstoObject ou HasVstoObject sont disponibles en tant que méthodes d’extension sur l’un des objets natifs suivants de votre projet : Document, Workbook, Worksheet ou ListObject. Lorsque vous appelez ces méthodes, il est inutile de passer un paramètre. L’exemple de code suivant montre comment utiliser la méthode GetVstoObject dans un complément VSTO Word qui cible le .NET Framework 3.5.

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

Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, vous devez modifier votre code pour accéder à ces méthodes de l’une des manières suivantes :

  • Vous pouvez toujours accéder à ces méthodes comme méthodes d'extension sur les objets Document, Workbook, Worksheetou ListObject . Toutefois, vous devez maintenant passer l'objet retourné par la propriété Globals.Factory à ces méthodes.

    Microsoft.Office.Tools.Word.Document vstoDocument =
        Globals.ThisAddIn.Application.ActiveDocument.GetVstoObject(Globals.Factory);
    
  • Vous pouvez également accéder à ces méthodes sur l'objet retourné par la propriété Globals.Factory. Lorsque vous accédez à ces méthodes de cette façon, vous devez passer l'objet natif que vous souhaitez étendre à la méthode.

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

    Pour plus d’informations, consultez Étendre les documents Word et les classeurs Excel dans les compléments VSTO au moment de l’exécution.

Mettre à jour le code qui utilise des instances des classes générées dans les projets au niveau du document

Dans les projets au niveau du document qui ciblent .NET Framework 3.5, les classes générées dans les projets dérivent des classes suivantes dans le runtime Visual Studio Tools pour Office :

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheetn : Worksheet

  • Chartn : ChartSheet

    Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, les types du runtime Visual Studio Tools pour Office répertoriés ci-dessus sont des interfaces, au lieu de classes. Les classes générées dans les projets qui ciblent .NET Framework 4 ou version ultérieure dérivent des nouvelles classes suivantes dans le runtime Visual Studio Tools pour Office :

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheetn : WorksheetBase

  • Chartn : ChartSheetBase

    Si le code de votre projet fait référence à une instance de l'une des classes générées comme classe de base dont il dérive, vous devez modifier le code.

    Par exemple, dans un projet de classeur Excel qui cible le .NET Framework 3.5, vous pouvez avoir une méthode d'assistance qui effectue des opérations sur les instances des classes Sheetn générées dans votre projet.

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

Si vous reciblagez le projet vers .NET Framework 4 ou version ultérieure, vous devez apporter l’une des modifications suivantes à votre code :

  • Modifiez le code qui appelle la méthode DoSomethingToSheet pour passer la propriété Base d'un objet WorksheetBase dans votre projet. La propriété retourne un objet Worksheet .

    DoSomethingToSheet(Globals.Sheet1.Base);
    
  • Modifiez le paramètre de la méthode DoSomethingToSheet pour attendre un objet WorksheetBase à la place.

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

Mettre à jour le code qui utilise des contrôles Windows Forms sur des documents

Vous devez ajouter une instruction Using (C#) ou Imports (Visual Basic) pour l’espace de noms ou Microsoft.Office.Tools.Word le Microsoft.Office.Tools.Excel haut de n’importe quel fichier de code qui utilise la propriété Controls pour ajouter des contrôles Windows Forms au document ou à la feuille de calcul par programmation.

Dans les projets qui ciblent le .NET Framework 3.5, les méthodes qui ajoutent des contrôles Windows Forms (tels que la méthode AddButton) sont définies dans les classes ControlCollection et ControlCollection.

Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, ces méthodes sont des méthodes d’extension disponibles sur la propriété Controls. Pour utiliser ces méthodes d'extension, le fichier de code dans lequel vous utilisez les méthodes doit avoir une instruction using ou Imports pour l'espace de noms Microsoft.Office.Tools.Excel ou Microsoft.Office.Tools.Word . Cette instruction est générée automatiquement dans de nouveaux projets qui ciblent .NET Framework 4 ou version ultérieure. Toutefois, comme cette instruction n'est pas ajoutée automatiquement aux projets qui ciblent le .NET Framework 3.5, vous devez l'ajouter lorsque vous reciblez le projet.

Pour plus d’informations, consultez Ajouter des contrôles à Bureau documents au moment de l’exécution.

Mettre à jour le code qui gère les événements de contrôle de contenu Word

Dans les projets qui ciblent le .NET Framework 3.5, les événements de contrôles de contenu Word sont contrôlés par le délégué générique EventHandler<TEventArgs> . Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, ces événements sont gérés par d’autres délégués.

Le tableau suivant répertorie les événements de contrôle de contenu Word et les délégués associés aux projets qui ciblent .NET Framework 4 ou version ultérieure.

Event Déléguer à utiliser dans .NET Framework 4 et les projets ultérieurs
Added ContentControlAddedEventHandler
ContentUpdating ContentControlContentUpdatingEventHandler
Deleting ContentControlDeletingEventHandler
Entering ContentControlEnteringEventHandler
Exiting ContentControlExitingEventHandler
StoreUpdating ContentControlStoreUpdatingEventHandler

Mettre à jour le code qui utilise les classes OLEObject et OLEControl

Dans les projets qui ciblent le .NET Framework 3.5, vous pouvez ajouter des contrôles personnalisés (tels que les contrôles utilisateur Windows Forms) à un document ou à une feuille de calcul à l'aide des classes Microsoft.Office.Tools.Excel.OLEObject et Microsoft.Office.Tools.Word.OLEControl.

Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, ces classes ont été remplacées par les interfaces et ControlSite les ControlSite interfaces. Vous devez modifier le code qui fait référence à Microsoft.Office.Tools.Excel.OLEObject et Microsoft.Office.Tools.Word.OLEControl pour faire référence à la place à ControlSite et ControlSite. En dehors des nouveaux noms, ces contrôles se comportent de la même façon que dans les projets qui ciblent le .NET Framework 3.5.

Pour plus d’informations, consultez Ajouter des contrôles à Bureau documents au moment de l’exécution.

Mettre à jour le code qui utilise la propriété Controls.Item(Object)

Dans les projets qui ciblent .NET Framework 3.5, vous pouvez utiliser la propriété Item(Object) de Microsoft. Bureau. Tools.Word.Document.Controls ou Microsoft.Office.Tools.Excel.Worksheet.Controls collection pour déterminer si un document ou une feuille de calcul a un contrôle spécifié.

Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, la propriété Item(Object) a été supprimée de ces collections. Pour déterminer si un document ou une feuille de calcul contient un contrôle spécifié, utilisez la méthode Contains(System.Object) de la collection ou Controls de la collection à la Controls place.

Pour plus d’informations sur la collection Controls de documents et de feuilles de calcul, consultez Ajouter des contrôles à Bureau documents au moment de l’exécution.

Mettre à jour le code qui utilise des collections dérivées de CollectionBase

Dans les projets qui ciblent .NET Framework 3.5, plusieurs types de collection dans le runtime Visual Studio Tools pour Office dérivent de la CollectionBase classe, par Microsoft.Office.Tools.SmartTagCollectionexemple , Microsoft.Office.Tools.Excel.ControlCollectionet Microsoft.Office.Tools.Word.ControlCollection.

Dans les projets qui ciblent .NET Framework 4 ou version ultérieure, ces types de collection sont désormais des interfaces qui ne dérivent pas de CollectionBase. Certains membres ne sont plus disponibles sur ces types de collections, comme Capacity, Listet InnerList.