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
Version de Microsoft Office
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
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)); }
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");
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
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)); }
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