Dezimal und Punkttrennung
Moderator: Moderatoren
Dezimal und Punkttrennung
Hallo Zusammen,
Ich habe mal wieder ein kleines Problem.
Ich benötige per Makro irgendwie Zugriff auf die Ländereinstellungen (also welches Dezimalzeichen wird verwendet usw). Am besten auch so, dass ich die ändern kann.
Kann mir hier irgendwer helfen?
PS: Es geht nicht darum die Dezimaleinstellungen für einzelne Zellen zu verändern, sondern Global auszulesen und zu ändern.
Ich habe mal wieder ein kleines Problem.
Ich benötige per Makro irgendwie Zugriff auf die Ländereinstellungen (also welches Dezimalzeichen wird verwendet usw). Am besten auch so, dass ich die ändern kann.
Kann mir hier irgendwer helfen?
PS: Es geht nicht darum die Dezimaleinstellungen für einzelne Zellen zu verändern, sondern Global auszulesen und zu ändern.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Dezimal und Punkttrennung
Zwei Makros hätte ich für Dich, zum Basteln...
Einmal dies:
Das wird für neuere OOo Versionen (>= 3.3?) gebraucht, bei denen man einen (vom Gebietsschema) abweichenden Dezimaltrenner einstellen kann. Das ist bei der Einstellung FALSE der Fall.
Und dann ein Codebeipiel von Villeroy, aus dem englischen Forum:
Die Routine GetRegistryKeyContent aus der TOOLS-Bibliothek eignet sich mit dem Schalter TRUE (2. Parameter) auch zum Ändern von Einstellungen.
Das hilft Dir schon mal weiter, oder? Viel Erfolg!
Einmal dies:
Code: Alles auswählen
Sub de49051
' 2011-06-24
GlobalScope.BasicLibraries.loadLibrary( "Tools" )
oRegDataAccess = _
GetRegistryKeyContent( "org.openoffice.Setup/L10N" , FALSE )
bDecimalSepAsLocale = oRegDataAccess.getByName( "DecimalSeparatorAsLocale" )
End Sub
Und dann ein Codebeipiel von Villeroy, aus dem englischen Forum:
Code: Alles auswählen
' Villeroy
' http://www.oooforum.org/forum/viewtopic.phtml?t=121837&
' 2011-04-12
Sub printAllLocalesToNewSpreadSheet()
Dim oDoc, oSheet, i18n, oInfo, a(), b(),i%, oItem
i18n = createUnoService("com.sun.star.i18n.LocaleData")
a() = i18n.getAllInstalledLocaleNames()
dim r(uBound(a()) +1)
Const cCols = 7
r(0) = Array("Locale","Language","Country","Decimal","Date","Time","1000","List")
For i = 0 to uBound(a())
oInfo = i18n.getLanguageCountryInfo(a(i))
oItem = i18n.getLocaleItem(a(i))
b() = Array( _
getLocaleString(a(i)), _
oInfo.LanguageDefaultName, _
oInfo.CountryDefaultName, _
oItem.decimalSeparator, _
oItem.dateSeparator, _
oItem.timeSeparator, _
oItem.thousandSeparator, _
oItem.listSeparator _
)
r(i +1) = b()
next
oDoc = StarDesktop.loadComponentFromURL("private:factory/scalc","_default",0,Array())
oSheet = oDoc.getSheets().getByIndex(0)
oSheet.getCellRangeByPosition(0, 0, cCols, uBound(r())).setDataArray(r())
End Sub
Die Routine GetRegistryKeyContent aus der TOOLS-Bibliothek eignet sich mit dem Schalter TRUE (2. Parameter) auch zum Ändern von Einstellungen.
Das hilft Dir schon mal weiter, oder? Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Dezimal und Punkttrennung
Hi komma4, das geht zwar in die Richtige Richtung, aber irgendwie komme ich damit noch nicht so ganz zu Recht.
Mein Problem ist folgendes. Ich lese einen HTML Report via Makro ein. Das klapt ganz gut. Allerdings ist mein Makro nicht in der Lage dabei die Dezimalpunkte entsprechend den Einstellungen anzupassen. (Wenn also im Report ein "." steht und ich eig "," verwende wird der Inhalt automatisch als String betrachtet). Ändere ich das dann Händisch, dann passt alles. Allerdings ist das keine Lösung. Das Problem ist, dass die Datei bei mir im Büro international verwendet wird, d.h. ich kann nicht sicher sein, welche Settings der Report hat und welche Settings Openoffice hat.
mit den beiden angegebenen Makros komm ich noch nicht ganz zurecht, wie ich dort Werte verändere.
Am besten gefällt mir dabei dieses Makro
Konkrete Fragen dazu:
1. Wie finde ich heraus welches der eingestellte DecimalSeparatorLocale ist?
2. Wie ändere ich diesen?
Vielen Dank und viele Grüße
Mein Problem ist folgendes. Ich lese einen HTML Report via Makro ein. Das klapt ganz gut. Allerdings ist mein Makro nicht in der Lage dabei die Dezimalpunkte entsprechend den Einstellungen anzupassen. (Wenn also im Report ein "." steht und ich eig "," verwende wird der Inhalt automatisch als String betrachtet). Ändere ich das dann Händisch, dann passt alles. Allerdings ist das keine Lösung. Das Problem ist, dass die Datei bei mir im Büro international verwendet wird, d.h. ich kann nicht sicher sein, welche Settings der Report hat und welche Settings Openoffice hat.
mit den beiden angegebenen Makros komm ich noch nicht ganz zurecht, wie ich dort Werte verändere.
Am besten gefällt mir dabei dieses Makro
Code: Alles auswählen
Sub de49051
' 2011-06-24
GlobalScope.BasicLibraries.loadLibrary( "Tools" )
oRegDataAccess = _
GetRegistryKeyContent( "org.openoffice.Setup/L10N" , FALSE )
bDecimalSepAsLocale = oRegDataAccess.getByName( "DecimalSeparatorAsLocale" )
End Sub
1. Wie finde ich heraus welches der eingestellte DecimalSeparatorLocale ist?
2. Wie ändere ich diesen?
Vielen Dank und viele Grüße
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Dezimal und Punkttrennung
Tictac hat geschrieben:die Datei bei mir im Büro international verwendet wird, d.h. ich kann nicht sicher sein, welche Settings der Report hat und welche Settings Openoffice hat.
[...] wie ich dort Werte verändere.
Du möchtest doch nicht wirklich die Einstellungen Deiner Kollegen ändern, oder?
Das zweite Makro sollte Dir zeigen, wie Du auf die konfigurierten Dezimaltrenner kommst.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Dezimal und Punkttrennung
sagen wir mal so, wenn ich deren Einstellung auslesen und verändern kann, dann kann ich die aktuellen Einstellungen sichern und danach wieder zurücksetzen wenn der Report eingelesen ist.
Das zweite Makro ist recht gut um alle möglichen Einstellungen auszulesen. Allerdings habe ich damit keine Möglichkeit gefunden auszulesen, welche Gültig sind.
Das liest einfach alle Ländereinstellungen der Reihenach aus. Aber ich verwende Beispielsweise obwohl ich Deutscher bin sehr gerne Englische Zeichen.
Von daher bringt mir das land selbst recht wenig.
Ich hab schon nen Weg gefunden wie ich die aktuell gültigen auslesen kann (Man trägt einfach ne Zahl in ne Zelle ein und liest die dann als String aus)
Jetzt brauch ich noch nen Weg, wie ich die verändern kann.
Das zweite Makro ist recht gut um alle möglichen Einstellungen auszulesen. Allerdings habe ich damit keine Möglichkeit gefunden auszulesen, welche Gültig sind.
Das liest einfach alle Ländereinstellungen der Reihenach aus. Aber ich verwende Beispielsweise obwohl ich Deutscher bin sehr gerne Englische Zeichen.
Von daher bringt mir das land selbst recht wenig.
Ich hab schon nen Weg gefunden wie ich die aktuell gültigen auslesen kann (Man trägt einfach ne Zahl in ne Zelle ein und liest die dann als String aus)
Jetzt brauch ich noch nen Weg, wie ich die verändern kann.
Re: Dezimal und Punkttrennung
Aloha
Ich persönlich würde lieber nicht an den Einstellungen selber rumwerkeln, sondern das Ganze mit einem ReplaceDescriptor (Suchen&Ersetzen) und regulären Ausdrücken machen - und dann für das entsprechende Trenn-Format - entweder per Nachfrage, welches Dezimaltrennformat verwendet wird, oder durch Auslesen der lokalen Einstellung - die Zeichen auf der Tabellenseite ersetzen.
Das sind (je nach Umsetzung) auch nur 10 Zeilen Code oder so, jedenfalls nicht viele.
Nachtrag:
Möglicherweise wäre es hilfreich, wenn Du mal ein Beispiel geben oder hochladen könntest, wie die HTML-Seiten ungefähr aussehen.
Ich persönlich würde lieber nicht an den Einstellungen selber rumwerkeln, sondern das Ganze mit einem ReplaceDescriptor (Suchen&Ersetzen) und regulären Ausdrücken machen - und dann für das entsprechende Trenn-Format - entweder per Nachfrage, welches Dezimaltrennformat verwendet wird, oder durch Auslesen der lokalen Einstellung - die Zeichen auf der Tabellenseite ersetzen.
Das sind (je nach Umsetzung) auch nur 10 Zeilen Code oder so, jedenfalls nicht viele.
Nachtrag:
Möglicherweise wäre es hilfreich, wenn Du mal ein Beispiel geben oder hochladen könntest, wie die HTML-Seiten ungefähr aussehen.
Re: Dezimal und Punkttrennung
Hallo Tictac,
Du willst aktiv die Optionen von OOo manipulieren, was nicht immer so einfach geht wie Du dir das vorstellst. Und damit meine ich, das bestimmte Optionen erst nach einem Neustart von OOo aktiv werden, wobei die Spracheinstellungen mit dazu gehören. Das sind also Sachen die man nicht mal so nebenbei im Hintergrund erledigt, ohne das der Anwender etwas davon mitbekommt.
Ich habe wohl noch nicht die Ahnung und Erfahrung wie z.B. komma4 und DPunch, aber ich denke mir das es vielleicht besser und schneller geht (also ohne OOo neu zu starten), wenn Du nur die gewünschten Optionen ausliest und dann dementsprechend per Makro deine Umwandlung vornimmst.
Kennst Du eigentlich xray?
Dem Nachtrag von DPunch kann ich nur zustimmen. Aber wer weiß, vielleicht brauchst Du ja auch gar kein Makro, oder zumindest nur ein sehr kleines abgespecktes. Doch dazu wäre es von Vorteil wenn wir genaueres wüssten.
- Um was für eine Art von HTML Report handelt es sich, nur Zahlen, Werte, oder auch Text?
- Im welchem OOo-Modul wird dieser Report weiterverarbeitet, Writer, Calc?
Nun, ich frag deshalb, weil ja die Möglichkeit bestünde den HTML Report z.B. in Calc via ->Einfügen ->Verknüpfung zu externen Daten einzulesen, und gleich beim Einfügen die dementsprechenden Spaltenoptionen einzustellen. Is ja nur so eine Überlegung.
Viel Erfolg.
Gruß
balu
Nun, ich hab jetzt nicht die dementsprechenden Punkte selber ausgetestet, aber dennoch möchte ich dich auf folgendes hinweisen.Ich benötige per Makro irgendwie Zugriff auf die Ländereinstellungen (also welches Dezimalzeichen wird verwendet usw). Am besten auch so, dass ich die ändern kann.
[...]
Es geht nicht darum die Dezimaleinstellungen für einzelne Zellen zu verändern, sondern Global auszulesen und zu ändern.
[...]
wenn ich deren Einstellung auslesen und verändern kann, dann kann ich die aktuellen Einstellungen sichern und danach wieder zurücksetzen wenn der Report eingelesen ist.
Du willst aktiv die Optionen von OOo manipulieren, was nicht immer so einfach geht wie Du dir das vorstellst. Und damit meine ich, das bestimmte Optionen erst nach einem Neustart von OOo aktiv werden, wobei die Spracheinstellungen mit dazu gehören. Das sind also Sachen die man nicht mal so nebenbei im Hintergrund erledigt, ohne das der Anwender etwas davon mitbekommt.
Ich habe wohl noch nicht die Ahnung und Erfahrung wie z.B. komma4 und DPunch, aber ich denke mir das es vielleicht besser und schneller geht (also ohne OOo neu zu starten), wenn Du nur die gewünschten Optionen ausliest und dann dementsprechend per Makro deine Umwandlung vornimmst.
Kennst Du eigentlich xray?
Wenn Du dich mit xray ein bischen angefreundet hast, dann könntest Du dir diesen Thread hier mal durchlesen. Ich denke mir mal mit dem beschriebenen Verfahren von komma4 dürftest Du das dann wohl herausbekommen. Und dadurch wärst Du dann wohl schon mal einen kleinen Schritt weiter.1. Wie finde ich heraus welches der eingestellte DecimalSeparatorLocale ist?
Dem Nachtrag von DPunch kann ich nur zustimmen. Aber wer weiß, vielleicht brauchst Du ja auch gar kein Makro, oder zumindest nur ein sehr kleines abgespecktes. Doch dazu wäre es von Vorteil wenn wir genaueres wüssten.
- Um was für eine Art von HTML Report handelt es sich, nur Zahlen, Werte, oder auch Text?
- Im welchem OOo-Modul wird dieser Report weiterverarbeitet, Writer, Calc?
Nun, ich frag deshalb, weil ja die Möglichkeit bestünde den HTML Report z.B. in Calc via ->Einfügen ->Verknüpfung zu externen Daten einzulesen, und gleich beim Einfügen die dementsprechenden Spaltenoptionen einzustellen. Is ja nur so eine Überlegung.
Viel Erfolg.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

Re: Dezimal und Punkttrennung
Hallo Zusammen, Erstmal vorab vielen dank für die vielen Anmerkungen und Kommentare dazu.
Der HTML Report enthällt leider Finanzdaten und daher darf ich den nicht als Beispiel hier hochladen (auch wenn ich zum testen einen uralt report nehme)
Da sind von Strings, über Kommazahlen bis hin zu Produktnummern (eig Strings, die aber nur aus Ziffern bestehen) alles dabei
Bezüglich dem Thema Einstellungen erst nach Neustart, stimmt das habe ich bei den ganzen Überlegungen bisher nicht bedacht.
Kommen wir zu dem Thema: Find and Replace. Das war auch mein erster Ansatz. Allerdings geht das nicht. Das Problem hierbei ist, dass, sobald der Report eingelesen wird, zahlen automatisch als zahlen erkannt werden (Hab das auch nicht aus bekommen). Das Problem muss ich euch an einem Zahlenbeispiel verdeutlichen.
Im Report die Zahl 572.392,84 Einstellungen in Openoffice USA funktioniert einwandfrei
Ist die Zahl allerdings nur 572.392 dann erkennt OOo den Punkt als Dezimaltrennzeichen und schreibt mir 572,392 in die Zelle. Das ist nicht so Ideal und verursacht auch noch Find and Replace Probleme.
Ich werde jetzt mal noch ein bischen weiter experimentieren. Ansonsten heißt es halt mal wieder "Chef, das geht in Openoffice nicht so wie in Excel. --> USA will das wir Openoffice benutzen dann sagen wir USA wie sie ihre Einstellungen vorzunehmen haben" (das hat bisher immer funktioniret wenns drauf ankam und wirklich nicht ging)
Xray-Tool kenne ich schon, irgendwie hab ich mich nur bisher immer gesträubt da einzuarbeiten, aber nachdem jeder davon schwärmt werde ich wohl doch das mir gleich anschauen müssen.
Vielen Dank nochmal für eure Unterstützung. Falls ich noch Fragen habe werde ich sie hier nochmal stellen. Falls ich eine Lösung finde ergänze ich diesen Thread.
Der HTML Report enthällt leider Finanzdaten und daher darf ich den nicht als Beispiel hier hochladen (auch wenn ich zum testen einen uralt report nehme)
Da sind von Strings, über Kommazahlen bis hin zu Produktnummern (eig Strings, die aber nur aus Ziffern bestehen) alles dabei
Bezüglich dem Thema Einstellungen erst nach Neustart, stimmt das habe ich bei den ganzen Überlegungen bisher nicht bedacht.
Kommen wir zu dem Thema: Find and Replace. Das war auch mein erster Ansatz. Allerdings geht das nicht. Das Problem hierbei ist, dass, sobald der Report eingelesen wird, zahlen automatisch als zahlen erkannt werden (Hab das auch nicht aus bekommen). Das Problem muss ich euch an einem Zahlenbeispiel verdeutlichen.
Im Report die Zahl 572.392,84 Einstellungen in Openoffice USA funktioniert einwandfrei
Ist die Zahl allerdings nur 572.392 dann erkennt OOo den Punkt als Dezimaltrennzeichen und schreibt mir 572,392 in die Zelle. Das ist nicht so Ideal und verursacht auch noch Find and Replace Probleme.
Ich werde jetzt mal noch ein bischen weiter experimentieren. Ansonsten heißt es halt mal wieder "Chef, das geht in Openoffice nicht so wie in Excel. --> USA will das wir Openoffice benutzen dann sagen wir USA wie sie ihre Einstellungen vorzunehmen haben" (das hat bisher immer funktioniret wenns drauf ankam und wirklich nicht ging)
Xray-Tool kenne ich schon, irgendwie hab ich mich nur bisher immer gesträubt da einzuarbeiten, aber nachdem jeder davon schwärmt werde ich wohl doch das mir gleich anschauen müssen.
Vielen Dank nochmal für eure Unterstützung. Falls ich noch Fragen habe werde ich sie hier nochmal stellen. Falls ich eine Lösung finde ergänze ich diesen Thread.
Re: Dezimal und Punkttrennung
Der HTML Report enthällt leider Finanzdaten und daher darf ich den nicht als Beispiel hier hochladen
Und es ist Dir ganz sicher auch verboten den Bericht erst zu anonymisieren und dann hochzuladen - oder etwa doch nicht?
Und cdas geschieht auch wenn Du beim Import die Formatierung der Spalte festlegst wie Dir von Balu geraten? Das wäre dann allerdings ein mir unbekannter Programmfehler der dringend gemeldet werden sollte.Ist die Zahl allerdings nur 572.392 dann erkennt OOo den Punkt als Dezimaltrennzeichen und schreibt mir 572,392 in die Zelle.
Gruß
Stephan
Re: Dezimal und Punkttrennung
Habe jetzt nach einer Lösung gesucht. Das Problem das ich habe liegt bereits am Import des HTML Sheet in meinem Macro.
Dies geschiet über die Codezeilen
Sobald die LinkURL festgelegt wird, ändert sich das Numberformat des Blattes auf Standard, egal was ich mache und das Problem entsteht.
Jemand eine andere Idee wie ich eine HTML Datei per Makro in Calc importieren kann? Vielleicht würde das das Problem beheben.
Vielen Dank und Viele Grüße
Dies geschiet über die Codezeilen
Code: Alles auswählen
oImportSheet.LinkMode = 1
oImportSheet.LinkUrl = PfadReportdateiHTML
oImportSheet.LinkMode = 0
oImportSheet.setLinkURL("")
Jemand eine andere Idee wie ich eine HTML Datei per Makro in Calc importieren kann? Vielleicht würde das das Problem beheben.
Vielen Dank und Viele Grüße
Re: Dezimal und Punkttrennung
Hallo
Importiere nicht, sondern lies die Daten per Script aus und trag sie per Script ein.
Du willst wissen wie ? - Ohne die Struktur des Html-Quelltexts kann ich da keine konkreteren Antworten geben, ich bin mir aber relativ sicher daß das mit ca. 20 Zeilen Pythoncode umsetzbar ist.
Gruß Karo
Importiere nicht, sondern lies die Daten per Script aus und trag sie per Script ein.
Du willst wissen wie ? - Ohne die Struktur des Html-Quelltexts kann ich da keine konkreteren Antworten geben, ich bin mir aber relativ sicher daß das mit ca. 20 Zeilen Pythoncode umsetzbar ist.
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)