Partager via


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

Si vous avez un projet Excel ou Word qui utilise l'une des fonctionnalités suivantes, vous devez modifier votre code si le cadre cible passe au .NET Framework 4 ou à une version ultérieure :

Supprimez l'attribut ExcelLocale1033 des projets Excel.

Le Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute a été supprimé de la partie du moteur d'exécution de Visual Studio 2010 Tools for Office qui est utilisée pour les solutions qui ciblent le .NET Framework 4 ou une version ultérieure. Le Common Language Runtime (CLR) du .NET Framework 4 et des versions ultérieures transmet toujours l'ID de paramètres régionaux 1033 au modèle d'objet Excel, et vous ne pouvez plus utiliser cet attribut pour désactiver ce comportement. Pour plus d'informations, voir Mondialisation 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 du moteur d'exécution Visual Studio 2010 Tools for Office utilisée pour les solutions qui ciblent le .NET Framework 4 ou une 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 l'Explorateur de solutions, ouvrez le menu contextuel de ThisAddin.cs (pour C#) ou de 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);
    
    

Mise à jour du code utilisant 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 Word VSTO qui cible le .NET Framework 3.5.

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

Dans les projets qui ciblent le .NET Framework 4 ou une 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, voir Étendre les documents Word et les classeurs Excel dans les compléments VSTO au moment de l'exécution.

Mettez à jour le code qui utilise les instances des classes générées dans les projets de niveau document.

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

  • ThisDocument: Document

  • ThisWorkbook: Workbook

  • Sheet n : Worksheet

  • Chart n : ChartSheet

    Dans les projets qui ciblent le .NET Framework 4 ou une version ultérieure, les types du runtime Visual Studio Tools for Office énumérés ci-dessus sont des interfaces et non des classes. Les classes générées dans les projets qui ciblent .NET Framework 4 ou une version ultérieure dérivent des nouvelles classes suivantes dans le moteur d'exécution Visual Studio Tools for Office :

  • ThisDocument: DocumentBase

  • ThisWorkbook: WorkbookBase

  • Sheet n : WorksheetBase

  • Chart n : 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 redirigez le projet vers .NET Framework 4 ou une 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 les contrôles Windows Forms sur les documents

Vous devez ajouter une instruction using (C#) ou Imports (Visual Basic) pour l'espace de noms Microsoft.Office.Tools.Excel ou Microsoft.Office.Tools.Word au début de tout fichier de code qui utilise la propriété Controls pour ajouter des contrôles Windows Forms au document ou à la feuille de calcul par programme.

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 le .NET Framework 4 ou une 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 les nouveaux projets qui ciblent le .NET Framework 4 ou une 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 aux documents Office au moment de l'exécution.

Mettez à jour le code qui gère les événements du 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 le .NET Framework 4 ou une 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 du contenu de Word et les délégués qui leur sont associés dans les projets qui ciblent le .NET Framework 4 ou une version ultérieure.

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

Mettez à 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 utilisent le .NET Framework 4 ou une version ultérieure, ces classes ont été remplacées par les interfaces ControlSite et ControlSite. 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 aux documents Office au moment de l'exécution.

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

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

Dans les projets qui ciblent le .NET Framework 4 ou une 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 plutôt la méthode Contains(System.Object) de la collection Controls ou Controls.

Pour plus d'informations sur la collection Contrôles des documents et des feuilles de calcul, voir Ajouter des contrôles aux documents Office au moment de l'exécution.

Mettez à jour le code qui utilise les collections dérivées de CollectionBase.

Dans les projets qui ciblent le .NET Framework 3.5, plusieurs types de collections du moteur d'exécution Visual Studio Tools for Office dérivent de la classe CollectionBase, comme Microsoft.Office.Tools.SmartTagCollection, Microsoft.Office.Tools.Excel.ControlCollection et Microsoft.Office.Tools.Word.ControlCollection.

Dans les projets qui ciblent le .NET Framework 4 ou une 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.