Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'aurais besoin en utilisant l'OLE Excel de formater des cellules au format monétaire en décimal 2 et avec le symbole euro.
J'avais donc pris un format "# ##0,00 €" et posionner ce format comme cela :
//Io_Excel.Worksheets(1).rows(lig).NumberFormat = le format ci dessus
Par contre en fonction du paramètre régional du poste de travail, si le séparateur de décimal est un point cela ne fonctionne pas et vis et versa.
Et dans le fichier Excel, je dois avoir des nombres et pas des zones en caractère, donc à priori je ne peux pas utiliser le format [currency].
Auriez vous une solution à ce problème, soit pour récupérer le paramètre régional du poste me permettant d'appliquer un format avec un point ou une virgule, ou une autre solution qui fonctionne dans tous les cas ?
Merci d'avance,
Version Pb :9.0
Hors ligne
Bonjour, voici un petit bout de script qui pourrait t'être utile pour récupérer le séparateur décimal
//External functions: function ULong GetThreadLocale() library "kernel32.dll" function Long GetLocaleInfoA(ULong Locale, Long LocaleNumber, ref string LocaleInfo, Int BufferSize) library "kernel32.dll" // This function returns decimal separator symbol: // string DecimalSeparator() String ls_result ULong ll_locale ll_locale = GetThreadLocale() ls_result = Space(30) GetLocaleInfoA(ll_locale, 14, ls_result, Len(ls_result)) // LOCALE_SDECIMAL= $0000000E; { decimal separator } Return ls_result
Hors ligne
erasorz a écrit:
Bonjour, voici un petit bout de script qui pourrait t'être utile pour récupérer le séparateur décimal
Code: pb
//External functions: function ULong GetThreadLocale() library "kernel32.dll" function Long GetLocaleInfoA(ULong Locale, Long LocaleNumber, ref string LocaleInfo, Int BufferSize) library "kernel32.dll" // This function returns decimal separator symbol: // string DecimalSeparator() String ls_result ULong ll_locale ll_locale = GetThreadLocale() ls_result = Space(30) GetLocaleInfoA(ll_locale, 14, ls_result, Len(ls_result)) // LOCALE_SDECIMAL= $0000000E; { decimal separator } Return ls_result
Merci pour cette solution.
Entre temps, j'ai trouvé une autre solution qui fonctionne également
IF pos(string(1/2), ".") > 0 THEN messagebox("point", ".") ELSE messagebox("virgule", ",") END IF
Hors ligne
wazou1812 a écrit:
Entre temps, j'ai trouvé une autre solution qui fonctionne également
Code: pb
IF pos(string(1/2), ".") > 0 THEN messagebox("point", ".") ELSE messagebox("virgule", ",") END IF
Pas mal trouvé du tout, j'aime bien...
Hors ligne
La solution de Erasorz fonctionne également très bien.
Encore merci
Hors ligne
Cortex a écrit:
wazou1812 a écrit:
Entre temps, j'ai trouvé une autre solution qui fonctionne également
Code: pb
IF pos(string(1/2), ".") > 0 THEN messagebox("point", ".") ELSE messagebox("virgule", ",") END IFPas mal trouvé du tout, j'aime bien...
très élégant en effet
Hors ligne
Les joies de la localisation... Windows utilise DEUX paramètres pour la génération du séparateur décimal :
CONSTANT Long LOCALE_SDECIMAL = 14 CONSTANT Long LOCALE_SMONDECIMALSEP = 22
Heureusement que PowerBuilder ne dispose pas d'un type de données "money" !
Et bravo pour le 1/2, très astucieux
Hors ligne