Mise en forme de données dans Excel avec différents paramètres régionaux
Mise à jour : novembre 2007
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et aux 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. |
Vous devez convertir toutes les données qui présentent une mise en forme sensible aux paramètres régionaux, telles que les dates et les devises au format de données Anglais (États-Unis) (ID de paramètres régionaux 1033), avant de les transmettre à Microsoft Office Excel ou de lire les données à partir du code de votre projet Visual Studio Tools pour Office.
Par défaut, avec l'exécution Visual Studio Tools pour Office, le modèle objet Excel attend la mise en forme de données de l'ID de paramètres régionaux 1033 (également appelé verrouillage de modèle objet avec l'ID de paramètres régionaux 1033). Ce comportement correspond à la manière dont Visual Basic for Applications fonctionne. Toutefois, vous pouvez modifier ce comportement dans vos solutions Visual Studio Tools pour Office.
Programmation du modèle objet Excel verrouillé
Par défaut, les personnalisations au niveau du document et les compléments d'application que vous créez en utilisant Visual Studio Tools pour Office ne sont pas affectés par les paramètres régionaux de l'utilisateur final, et se comportent systématiquement comme si les paramètres régionaux avaient pour valeur Anglais (États-Unis). Par exemple, si vous obtenez ou définissez la propriété Value2 dans Excel, les données doivent être mises en forme comme l'ID de paramètres régionaux 1033 s'y attend. Si vous utilisez un format de données différent, vous pouvez obtenir des résultats inattendus.
Bien que vous utilisiez le format Anglais (États-Unis) pour des données transmises ou manipulées par un code managé, Excel interprète et affiche correctement les données en fonction des paramètres régionaux en vigueur sur l'ordinateur de l'utilisateur final. Excel peut mettre les données en forme correctement parce que le code managé transmet l'ID de paramètres régionaux 1033 avec les données. Cet ID indique que les données sont au format Anglais (États-Unis) et que, par conséquent, elles doivent être reformatées pour correspondre aux paramètres régionaux en vigueur sur l'ordinateur de l'utilisateur.
Par exemple, si les paramètres régionaux des utilisateurs finaux sont définis sur Allemand (Allemagne), ces utilisateurs s'attendent à ce que la date du 29 juin 2005 soit mise en forme de la manière suivante : 29.06.2005. Toutefois, si votre solution transmet la date à Excel sous la forme d'une chaîne, vous devez mettre cette date en forme selon le format Anglais (États-Unis) : 6/29/2005. Si la cellule est mise en forme en tant que cellule de type Date, Excel affiche la date au format Allemand (Allemagne).
Déverrouillage du modèle objet Excel
Visual Studio Tools pour Office vous permet de déverrouiller le comportement de l'ID de paramètres régionaux pour la totalité du modèle objet Excel. Le ExcelLocale1033Attribute contrôle le comportement du modèle objet Excel dans votre solution Visual Studio Tools pour Office. Par défaut, l'attribut a la valeur true, ce qui verrouille le modèle objet Excel sur le format de données de l'ID de paramètres régionaux 1033. Lorsque cet attribut est true, Visual Studio Tools pour Office encapsule chaque objet Excel instancié par la solution dans un objet proxy qui passe toujours l'ID de paramètres régionaux 1033 à Excel. Lorsque vous affectez à l'attribut la valeur false, ces objets proxy ne sont pas utilisés et le modèle objet Excel utilise les paramètres régionaux de l'utilisateur final.
Remarque : |
---|
Si vous affectez à l'attribut la valeur false et si tous les utilisateurs finaux ont des paramètres régionaux autres que Anglais (États-Unis), ces utilisateurs peuvent être confrontés à un comportement inattendu de votre solution. Vous pouvez rédiger votre code afin qu'il fonctionne avec n'importe quel jeu de paramètres régionaux. Pour plus d'informations, consultez 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. |
Pour déverrouiller le modèle objet, affectez au ExcelLocale1033Attribute enregistré dans le fichier AssemblyInfo.vb ou AssemblyInfo.cs de votre projet la valeur false.
<Assembly: ExcelLocale1033(False)>
[assembly: ExcelLocale1033(false)]
Remarque : |
---|
Comme l'exécution Visual Studio Tools pour Office encapsule tous les objets Excel natifs dans un objet proxy lorsque ExcelLocale1033Attribute a la valeur true, il se peut que vous constatiez un ralentissement dans certaines opérations qui impliquent des objets Excel natifs. Dans ces cas, vous pouvez améliorer les performances en utilisant la méthode Unwrap pour obtenir l'objet Excel sans le proxy et effectuez ensuite l'opération utilisant cet objet. Dans ce cas, vous devez être conscient que l'objet retourné par Unwrap utilise l'ID de paramètres régionaux du thread actuel, et non l'ID de paramètres régionaux 1033. |
Déverrouillage d'objets Excel spécifiques dans des projets Excel 2003
Si vous développez des solutions pour Excel 2003, il existe certains cas dans lesquels vous devez modifier un objet Excel natif (autrement dit, une instance d'une classe définie dans l'espace de noms Microsoft.Office.Interop.Excel), afin qu'il utilise l'ID de paramètres régionaux du thread actuel au lieu de l'ID de paramètres régionaux 1033. Par exemple, vous pouvez procéder ainsi si vous souhaitez passer null en tant que paramètre out d'une méthode qui appartient à un objet Excel.
Pour modifier le comportement d'ID de paramètres régionaux de chaque objet Excel dans des projets Excel 2003, utilisez des méthodes de la classe ExcelLocale1033Proxy. Appelez la méthode Unwrap pour modifier un objet Excel de sorte qu'il utilise l'ID de paramètres régionaux du thread actuel au lieu de l'ID de paramètres régionaux 1033.
Après avoir appelé Unwrap pour modifier un objet Excel, vous pourrez réutiliser l'objet, à condition de vouloir utiliser l'ID de paramètres régionaux 1033 au lieu de celui du thread actuel. Appelez la méthode Wrap pour encapsuler l'objet Excel dans un objet proxy qui utilise l'ID de paramètres régionaux 1033 au lieu de l'ID de paramètres régionaux du thread actuel.
Remarque : |
---|
Les méthodes Unwrap et Wrap sont obsolètes dans les projets Visual Studio Tools pour Office pour Excel 2007. L'exécution Visual Studio Tools pour Office utilisée avec les projets Excel 2007 contient des améliorations grâce auxquelles les objets Excel natifs fonctionnent comme prévu lorsque la valeur true est assignée à ExcelLocale1033Attribute. Pour plus d'informations sur le runtime de Visual Studio Tools pour Office, consultez Vue d'ensemble de Visual Studio Tools pour Office Runtime. |
Appel de méthodes ayant des paramètres de sortie lorsque le modèle objet Excel est verrouillé
Si ExcelLocale1033Attribute a la valeur true dans une solution Excel 2003, vous recevez alors une exception si vous passez null en tant que paramètre out d'une méthode dans le modèle objet Excel. Pour définir null comme paramètre out, vous devez appeler Unwrap et le définir dans l'objet qui contient la méthode avant d'appeler celle-ci.
Vous pouvez sinon affecter une valeur au paramètre avant d'appeler la méthode. Pour plus d'informations sur les paramètres out, consultez out (Référence C#).
Par exemple, le code suivant génère une exception si ExcelLocale1033Attribute a la valeur true. La méthode ExportXml possède un paramètre out.
Dim outString As String = Nothing
Dim result As Excel.XlXmlExportResult = _
Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = null;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);
Pour résoudre ce problème, vous pouvez définir XmlMap dans la méthode Unwrap avant d'appeler ExportXml.
Dim outString As String = Nothing
Dim map As Excel.XmlMap = TryCast( _
Microsoft.Office.Tools.Excel.ExcelLocale1033Proxy.Unwrap( _
Globals.ThisWorkbook.XmlMaps(1)), Excel.XmlMap)
Dim result As Excel.XlXmlExportResult = map.ExportXml(outString)
string outString = null;
Excel.XmlMap map = Microsoft.Office.Tools.Excel.
ExcelLocale1033Proxy.Unwrap(
Globals.ThisWorkbook.XmlMaps[1]) as Excel.XmlMap;
Excel.XlXmlExportResult expResult = map.ExportXml(out outString);
Vous pouvez sinon affecter une valeur à la variable outString pour la définir dans ExportXml.
Dim outString As String = String.Empty
Dim result As Excel.XlXmlExportResult = _
Globals.ThisWorkbook.XmlMaps(1).ExportXml(outString)
string outString = String.Empty;
Excel.XlXmlExportResult expResult =
Globals.ThisWorkbook.XmlMaps[1].ExportXml(out outString);
Voir aussi
Tâches
Comment : localiser des solutions Excel
Concepts
Création de solutions Office dans Visual Studio
Vue d'ensemble de Visual Studio Tools pour Office Runtime