Zahlenformate ermitteln

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Zahlenformate ermitteln

Beitrag von flanelli »

Kann mir jemand verraten über welchen call man die Zahlenformate unter WIN10 ( unter win7 wirds wohl auch nicht anders laufen )
ermitteln kann.

Speziell geht es mir dabei um das "Symbol für Zifferngruppierung"
zahlenformat_win10.jpg
zahlenformat_win10.jpg (65.85 KiB) 13133 mal betrachtet
Herzlichen Dank schon mal im Voraus ...
Ahoile aus dem Süden
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Zahlenformate ermitteln

Beitrag von HaPe »

Hallo Flanelli !
Kann mir jemand verraten über welchen call man die Zahlenformate unter WIN10 ( unter win7 wirds wohl auch nicht anders laufen )
ermitteln kann.
SetLocale ist in Xbase++ dafür vorgesehen.
Die Konstanten NLS_SDECIMAL und NLS_STHOUSAND verwenden.
--
Hans-Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Zahlenformate ermitteln

Beitrag von Jan »

...jetzt war HaPe schneller... Wobei das SetLocale() ist.

das sind in diesem Fall die Parameter
NLS_SLIST (Listen-Separator)
NLS_SDECIMAL (Dezimal-Separator)
NLS_STHOUSAND (Tausender-Separator)

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Danke JAN, aber wie gerade gepostet, um das geht es ja nicht ( sowas sollte ja wohl jedem oldie in der XbaseSzene bekannt sein )
Hast Du eine Ahnung wis man das über die API auslesen kann?4
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Nachstehend das Fehlerprotokoll

wie gesagt, triit NUR auf wenn im OS das Symbol für die Zifferngruppierung LEER ist

oError:args :
-> VALTYPE: C VALUE: NumberFormat
-> VALTYPE: C VALUE: #.##0,00
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Die NumberFormat-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
oError:filename : NIL
oError:genCode : NIL
oError:operation : NumberFormat
oError:osCode : -2146827284
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 3
oError:tries : NIL
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

nur zur Klarstellung...
über die setlocale ... NLS_STHOUSAND erhalte ich unter WIN10 keinerlei Info über das Symbol
der Wert ist hier generel immer LEER obwohl ein PUNKT definiert ist.
Ahoile aus dem Süden
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Zahlenformate ermitteln

Beitrag von HaPe »

Hallo Flanelli !
nur zur Klarstellung...
über die setlocale ... NLS_STHOUSAND erhalte ich unter WIN10 keinerlei Info über das Symbol
der Wert ist hier generel immer LEER obwohl ein PUNKT definiert ist.
Hast du ein angepasstes Manifest in deiner EXE?
Wenn nein, schau dir mal diesen Thread:
viewtopic.php?f=20&t=8921
an und setze es um.
Es geht um die Windows-Kompatibilitäts-Einträge im Abschnitt <application> des XML-Manifestes aus Jimmys OSVER.ZIP.
--
Hans-Peter
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Danke Hans-Peter, das muss ich mir nun tatsächlich genauer anschauen ...
Ahoile aus dem Süden
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Zahlenformate ermitteln

Beitrag von HaPe »

Hallo Flanelli !

Mit dem passenden Manifest sollten auch mit Xbase++ v1.9 erstellte Programme die Systeminfos mit SetLocale die korrekten Werte auslesen können.
Jimmy hatte das für 1.9er Programme anhand der OS-Funktion festgestellt.
Und für 2.0er Programme kann dies nicht schaden.
--
Hans-Peter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Zahlenformate ermitteln

Beitrag von AUGE_OHR »

flanelli hat geschrieben: Di, 18. Jun 2019 15:35 oError:args :
-> VALTYPE: C VALUE: NumberFormat
-> VALTYPE: C VALUE: #.##0,00
oError:canDefault : J
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Die NumberFormat-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
oError:filename : NIL
oError:genCode : NIL
oError:operation : NumberFormat
oError:osCode : -2146827284
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 3
oError:tries : NIL
das ist eine ActiveX Fehlermeldung von Excel :!:

was machst du da genau :?:
gruss by OHR
Jimmy
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

hallo jimmy,

ja klar ist das eine ActiveX-Fehlermeldung

ich mach da überhaupt nochts besonders ...

erstelle ein excelsheet und lege dann fest, welches
Format die einzelnen Spalten haben sollen.

Beispiel:
oSheet_&lim_nr:Columns( 1 ):NumberFormat := "@"
oSheet_&lim_nr:Columns( 2 ):NumberFormat := "#.##0,00"
oSheet_&lim_nr:Columns( 3 ):NumberFormat := "#.##0,0000"

und beim Numberformat "#.##0,00" knallt es bereits und zwar
lediglich aus nur EINEM EINZIGEN Grund.

Diesen habe ja auch bereits im Posting
Re: EXCEL 2010 - Problem bei Formatierung Nummernformat
Beitrag von flanelli » Mi, 30. Mai 2018 13:21
mit Unterstützung von Bjelinek fixieren können.
BJelinek hat geschrieben: ↑
Fr, 04. Mai 2018 18:27
Kann es an den Ländereinstellungen und Zahlenformaten im Windows liegen?
Auf Schweizer Rechnern gibt es Teilweise Anzeigeprobleme nach Office
Neuinstallationen/Reparaturinstallationen.


Dieser Grund nochmal wie folgt:
Auch wenn man in den Excel-Grundeinstellungen die Option
"Trennzeichen vom Betriebssystem übernehmen" NICHT anhakt
und sodann die Dezimal- bzw. Tausendertrennzeichen direkt in Excel als
Vorgabe mit , und . definiert, wird dies via ActiveX deifintiv ignoriert
und wenn dann im OS WIN10 z.B. der Wert für die Zifferngruppierung LEER
ist dann kommt es unwiderbringlich zu diesem Fehler.

Die Crux daran ist, dass bei völig identischen Rechnern mit völlig identischer
WIN10-Installation es dennoch vorkommt, das immer wieder mal ein Rechner dabei ist,
bei dem die Standardwerte Dezimaltrennzeichen ist ein beistrisch zwar stimmt aber
der Wert für die Zifferngruppierung, also den Tausendertrennteichens anstatt eines
Punktes LEER bleibt.

Um bereits im Vorfeld so einen Fehler zu vermeiden und daher erst gar keine
Erstelung eines Excelsheets mit erforderlichen numerischen Spalten zu erlauben
wenn das Trennzeichen LEER ist, möchte ich eben den Wert des OS ermitteln
und dann gegebenfalls auch den Anwender bzw. den direkten Support des Kunden
mit einem Mail darüber informieren um die Einstellung im OS manuell zu korrigieren.

Allerdings erhalte ich über SetLocale(NLS_STHOUSAND) nicht immer den wirklich
im OS eingetragenen Wert, er bleibt nämlich immer LEER obwohl ein Punkt eingetragen
istm und damit würde ein automatisches Blockieren der Sheeterstellung trotz
letzendlich ja in so einem Fall fehlerfreien Erstellung sinnlos.

Daher meine Intention, den ECHTEN Wert für die Zifferngruppierung über einen
anderen Weg, zb. via API zu ermitteln.
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

HaPe hat geschrieben: Di, 18. Jun 2019 16:34 Hallo Flanelli !

Mit dem passenden Manifest sollten auch mit Xbase++ v1.9 erstellte Programme die Systeminfos mit SetLocale die korrekten Werte auslesen können.
Jimmy hatte das für 1.9er Programme anhand der OS-Funktion festgestellt.
Und für 2.0er Programme kann dies nicht schaden.
Hallo HAns-Peter,
leider kann ich so auch keine Lösung finden aber ich denke es muß doch irgendeinen Weg
über einen DllCall geben ....
Ahoile aus dem Süden
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Zahlenformate ermitteln

Beitrag von AUGE_OHR »

hi,

versuch mal

Code: Alles auswählen

         oSheet:Columns( 3 ):NumberFormatLocal
         oSheet:Columns( 3 ):NumberFormat := "###.###.##0,00"
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Zahlenformate ermitteln

Beitrag von Koverhage »

Ich bzw. meine Kunden haben hiermit
oSheet:Range("AW2:AW"+cMaxLength):NumberFormat := "#.##0,00 _€"
keine Probleme.
Gruß
Klaus
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

AUGE_OHR hat geschrieben: Di, 18. Jun 2019 22:43 hi,

versuch mal

Code: Alles auswählen

         oSheet:Columns( 3 ):NumberFormatLocal
         oSheet:Columns( 3 ):NumberFormat := "###.###.##0,00"
Leider hat das auch keine Auswirkung wenn die Einstellung für das Symbol der Zifferngruppierung im OS LEER ist ( also keinen Punkt hat )
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Koverhage hat geschrieben: Mi, 19. Jun 2019 7:51 Ich bzw. meine Kunden haben hiermit
oSheet:Range("AW2:AW"+cMaxLength):NumberFormat := "#.##0,00 _€"
keine Probleme.
Hallo Klaus,
Das Problem ensteht sozusagen ja nicht durch die, an sich ja völlig korrekte Formatangabe "#.##0,00"

zum Laufzeitfehler kommt es aber mit 100%-tiger Sicherheit immer dann, wenn in dieser Formatangabe
z.b. der PUNKT für das Symbol der Zifferngruppierung ( Tausenderpunkt ) nicht identisch ist mit der
Einstellung im OS für eben dieses Symbol der Zifferngruppierung ( zb. wie schion beschrieben LEER ist )
bzw. wenn in den globalen Exceleinstellungen das so der Fall ist.

In Excel kann man ja festlegen ob generell die Trennzeichen vom OS verwendet werden sollen oder
ob die Zeichen in der Excel-Einstellung herangezogen werden sollen.

Wie ich ja schon geschrieben habe ist in EXCEL die interne Einstellung standardmäßig immer für den
Tausendertrennzeichen ein PUNKT.

Aber in WIN10 ist das nicht immer der Fall, also idente Rechner, idente Installation, keine manuellen
Eingriffe und dennoch mal ein PUNKT und mal LEER.

Und in Kombination WIN10 und z.B. OFFICE2016 werden trotz Deaktivierung des Heranzioehens der Trenzeichenvorgaben
vom OS eben doch diese verwendet und nicht die internen von EXCEL.
Der prinzipielle Fehler tritt aber natürlich auch in allen anderen beliebigen Kombinationen von OS und EXCEL auf,
wenn man die Einstellung bewußt manuell statt eines Punktes auf ein Leerzeichen setzt.

Genau nur deshalb suche ich eine Lösung wie ich den Anwender VOR einem solchen, dann zwangsläufig
auftretenden Fehler warnen kann bzw. gleich beim Einstieg in das Programm eine diesbezügliche Warnung
anzeigen kann. Dazu muß ich aber zumindest den Wert im OS für das Trennzeichensymbol ermitteln können
und genau das klappt leider nicht immer korrekt über ein SetLocale(NLS_STHOUSAND).
Manchmal wird es richtig angezeigt aber unter WIN10 sehr oft auch falsch.

Stelle einfach mal die Einstellungen für die Zifferngruppierung im OS und am besten auch gleich
in den globalen EXCEL-Einstellungen für das Tausendertrennzeichen auf LEER ( also ein BLANK eingeben ).
Dann Starte Deine APP nochmal neu und erstelle via ActiveX ein EXCEL-Sheet und du wirst garantiert
den gleichen Laufzeitfehler bekommen den ich beschrieben habe.
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Ich versuche es also noch einmal mit einer ganz kurzen und klaren Anfrage...

Kennt jemand einen anderen Weg, wie man das eingestelle Symbol für die Zifferngruppierung im OS ermitteln kann
als jenen über SetLocale(NLS_STHOUSAND).

Z.B. über ein DLLCALL( .......

Danke
Ahoile aus dem Süden
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Zahlenformate ermitteln

Beitrag von Jan »

Ich glaube die Diskussion wäre etwas zielgerichteter gelaufen wenn das Problem von Anfang an klar gewesen wäre. Hans-Peter und ich hatten eindeutig und korrekt auf die Eingangsfrage geantwortet. Das war aber irgendwie doch falsch, es sollte ein API-Aufruf sein. Dann kamen plötzlich noch irgend welche Excel-ActiveX-Abfragen dazu in den verschiedensten Variationen. Nur um dann in der Ausage zu enden das Windows 10 manchmal überhaupt keine Trennzeichen eingetragen hat (was ich nicht verstehe), oder andere als Excel, und das Excel und Windows sich nicht einig werden welches davon denn nun gelten solle.

Einfach geht anders.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Zahlenformate ermitteln

Beitrag von AUGE_OHR »

Das Tausender Trennzeichen hat sich seit Windows 8.x geändert und ist ein "schmales Leerzeichen" (0xA0)
https://social.msdn.microsoft.com/Forum ... ppcompatde

---

ich habe was gefunden was helfen könnte
viewtopic.php?f=27&t=3494&p=36317

hab eine Kurzform daraus gemacht die Komma und Tausender-Punkt prüft.
NLS_API.ZIP
DLLFUNCTION GetLocaleInfoA()
(748 Bytes) 263-mal heruntergeladen
gruss by OHR
Jimmy
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

Jan hat geschrieben: Mi, 19. Jun 2019 10:13 Ich glaube die Diskussion wäre etwas zielgerichteter gelaufen wenn das Problem von Anfang an klar gewesen wäre. Hans-Peter und ich hatten eindeutig und korrekt auf die Eingangsfrage geantwortet. Das war aber irgendwie doch falsch, es sollte ein API-Aufruf sein. Dann kamen plötzlich noch irgend welche Excel-ActiveX-Abfragen dazu in den verschiedensten Variationen. Nur um dann in der Ausage zu enden das Windows 10 manchmal überhaupt keine Trennzeichen eingetragen hat (was ich nicht verstehe), oder andere als Excel, und das Excel und Windows sich nicht einig werden welches davon denn nun gelten solle.

Einfach geht anders.

Jan
Ja sorry guter werter Herr Jan...
Ich hatte auch das Problem gleich h´ganz konkret und detailiert nach der Nachricht von HAPE gepostet und genau in diesem
Moment kam dann deine Nachricht rein und da wurde offenbar mein Text bein absenden irgendwie "verschluckt".
Ich habe das aber erst später bemerkt und daher das Problem eben nochmal im Detail beschrieben.

Ja, Einfach geht anders aber ich bin ja sehr froh, dass alle DEINE Postings so unübertrefflich einfach und ohne Schnörkel sind =D> :blob8:

PS.: Die TATSACHE, dass Windows 10 manchmal überhaupt keine Trennzeichen eingetragen hat (was du nicht verstehst), oder andere als Excel, und das Excel und Windows sich nicht einig werden welches davon denn nun gelten solle, verstehen wohl nicht mal die Mircoschrottentwickler was aber
nichts daran ändert, dass es eben so ist ( wie so vieles andere auch das niemand bei Windows versteht ) :badgrin:
Ahoile aus dem Süden
flanelli
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Di, 11. Mai 2010 16:27
Hat sich bedankt: 3 Mal
Danksagung erhalten: 9 Mal

Re: Zahlenformate ermitteln

Beitrag von flanelli »

AUGE_OHR hat geschrieben: Mi, 19. Jun 2019 11:51 Das Tausender Trennzeichen hat sich seit Windows 8.x geändert und ist ein "schmales Leerzeichen" (0xA0)
https://social.msdn.microsoft.com/Forum ... ppcompatde

---

ich habe was gefunden was helfen könnte
viewtopic.php?f=27&t=3494&p=36317

hab eine Kurzform daraus gemacht die Komma und Tausender-Punkt prüft.
NLS_API.ZIP
PERFEKT Jimmy, genau das habe ich gesucht ...

Deine DLLFUNCTION GetLocaleInfoA( nLanguage, nInfoType, @cData, nLenData ) using stdcall from kernel32.dll
bringt exakt den Wert der tatsächlich im OS definiert ist und auch wenn es manche eventuell nicht glauben können
ist es tatsächlich so, dass über SetLocale(NLS_STHOUSAND) das nicht immer der Fall ist ( zumindest unter WIN10 )

DANKE, das erleichtert mir jetzt doch sehr vieles und der Fehler kann bereits im Vorfeld erkannt werden.
Ahoile aus dem Süden
Antworten