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

Mise à jour : novembre 2007

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Type de projet

  • Projets au niveau du document

Version de Microsoft Office

  • Excel 2003

  • Excel 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Lorsque vous utilisez des paramètres Visual Studio Tools pour Office par défaut, mettez toujours en forme les chaînes de données sensibles aux paramètres régionaux en anglais (États-Unis). Excel affichera automatiquement les données correctement mises en forme. Si vous modifiez la valeur par défaut en affectant à ExcelLocale1033Attribute la valeur false et que vous passez des littéraux de chaîne à Excel, le LCID actuel du thread est automatiquement utilisé et la mise en forme des données risque d'être incorrecte. Pour plus d'informations, consultez Mise en forme de données dans Excel avec différents paramètres régionaux.

Si vous décidez d'affecter à ExcelLocale1033Attribute la valeur false, vous pouvez utiliser la réflexion pour définir ou obtenir une propriété ou appeler une méthode dans la plage cible, en passant CultureInfo en anglais (États-Unis) afin de pouvoir utiliser le nom anglais de toute chaîne et que cela fonctionne correctement dans tous les paramètres régionaux.

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

  1. Créez une fonction d'assistance appelée SetPropertyInternational pour passer le LCID en anglais (États-Unis) chaque fois que vous définissez des valeurs de propriété dans les plages Excel en passant un littéral de chaîne.

    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 fonction SetPropertyInternational et passez NamedRange, le nom de la propriété et la valeur.

    Remarque :

    Vous ne pouvez pas passer directement le contrôle NamedRange ; vous devez passer l'objet Range sous-jacent en appelant la méthode InnerObject. 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 appelée GetPropertyInternational pour définir le LCID chaque fois que vous récupérez des valeurs de propriété de plages Excel.

    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é.

    Remarque :

    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

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

Globalisation et localisation de solutions Office

Création de solutions Office dans Visual Studio

Autres ressources

Déploiement de solutions Office