Partager via


Comment : rendre les littéraux de chaîne sécurisés du point de vue de la région dans Excel à l'aide de la réflexion

Dans les projets Office, Excel affiche correctement les chaînes de données qui dépendent des paramètres régionaux si vous affectez aux chaînes de votre projet le format Anglais (États-Unis). Vous pouvez modifier ce comportement dans un projet Office qui cible .NET Framework 3.5 en attribuant à Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute la valeur false. Toutefois, lorsque vous passez des littéraux de chaîne à Excel après avoir modifié cet attribut, le LCID actuel du thread est utilisé automatiquement et il se peut que les données ne soient pas mises en forme correctement. Pour plus d'informations, consultez Mise en forme de données dans Excel avec différents paramètres régionaux.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et de niveau application pour Excel 2007 et Excel 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Si vous attribuez à Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute la valeur false dans un projet Office qui cible .NET Framework 3.5, vous pouvez utiliser la réflexion pour forcer des appels spécifiques aux propriétés et méthodes d'objets Excel de façon à utiliser le format de données Anglais (États-Unis)(ID de paramètres régionaux 1033). Lorsque vous procédez ainsi, vous pouvez utiliser le format Anglais (États-Unis) pour toutes les chaînes passées à la propriété ou à la méthode, le code fonctionnera correctement dans tous les paramètres régionaux.

Les exemples suivants montrent comment définir ou obtenir une propriété d'un contrôle NamedRange dans un projet au niveau du document pour Excel, mais les mêmes concepts s'appliquent également aux objets Excel dans les projets au niveau de l'application.

Pour définir une propriété dans une plage Excel à l'aide de la réflexion

  1. Créez une méthode d'assistance qui utilise la méthode InvokeMember pour définir une valeur de propriété d'un objet Excel. Incluez les paramètres de l'objet Excel, le nom de la propriété et les paramètres de la propriété. Dans la méthode d'assistance, utilisez une surcharge InvokeMember comportant un paramètre CultureInfo et passez l'ID de paramètres régionaux pour l'anglais (États-Unis) à ce paramètre.

    Shared Function SetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.SetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object SetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new
            System.Globalization.CultureInfo(1033));
    }
    
  2. Créez un contrôle NamedRange dans la cellule A5 et nommez-le NamedRange1.

    Dim NamedRange1 As Microsoft.Office.Tools.Excel.NamedRange = _
        Me.Controls.AddNamedRange(Me.Range("A5"), "NamedRange1")
    
    Microsoft.Office.Tools.Excel.NamedRange NamedRange1 =
        this.Controls.AddNamedRange(this.Range["A5", missing], "NamedRange1");
    
  3. Au lieu de définir directement la propriété Formula de NamedRange1, appelez la méthode d'assistance SetPropertyInternational et passez l'objet Range sous-jacent pour le contrôle NamedRange, le nom de propriété et la valeur.

    Notes

    Vous ne pouvez pas passer directement le contrôle NamedRange. À la place, vous devez obtenir l'objet Excel Range sous-jacent en utilisant la propriété InnerObject, puis en passant cet objet à la méthode. Pour plus d'informations, consultez Limitations de programmation des éléments hôtes et des contrôles hôtes.

    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)")
    
    SetPropertyInternational(NamedRange1.InnerObject, "Formula", "=SUM(12, 34)");
    

Pour récupérer une valeur de propriété d'une plage Excel à l'aide de la réflexion

  1. Créez une fonction d'assistance qui utilise la méthode InvokeMember pour obtenir une valeur de propriété d'un objet Excel. L'objet, le nom et les paramètres de la propriété sont passés à la méthode d'assistance.

    Shared Function GetPropertyInternational( _
        ByVal target As Object, ByVal name As String, _
        ByVal ParamArray parameters() As Object) As Object
    
        Return target.GetType.InvokeMember(name, _
            Reflection.BindingFlags.Instance Or Reflection.BindingFlags.GetProperty, _
            Nothing, target, parameters, _
            System.Globalization.CultureInfo.GetCultureInfo(1033))
    End Function
    
    static object GetPropertyInternational(object target, string name, params object[] args)
    {
        return target.GetType().InvokeMember(name,
            System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty |
            System.Reflection.BindingFlags.Public,
            null, target, args, new 
            System.Globalization.CultureInfo(1033));
    }
    
  2. Appelez la fonction GetPropertyInternational et passez NamedRange et le nom de la propriété.

    Notes

    L'exemple de code suivant suppose que vous avez un contrôle NamedRange nommé NamedRange1 dans la feuille de calcul.

    Dim formula As String = CType( _
        GetPropertyInternational(NamedRange1.InnerObject, "Formula"), String)
    
    MessageBox.Show(formula)
    
    string formula = (string)
        GetPropertyInternational(NamedRange1.InnerObject, "Formula");
    
    MessageBox.Show(formula);
    

Voir aussi

Tâches

Comment : cibler l'interface utilisateur multilingue d'Office

Concepts

Chargement et utilisation dynamiques des types

Mise en forme de données dans Excel avec différents paramètres régionaux

Globalisation et localisation de solutions Office

Autres ressources

Deploying Office Solutions

Conception et création de solutions Office