Dezimal und Punkttrennung

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Tictac
**
Beiträge: 25
Registriert: Di, 12.01.2010 15:12

Dezimal und Punkttrennung

Beitrag von Tictac »

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.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dezimal und Punkttrennung

Beitrag von komma4 »

Zwei Makros hätte ich für Dich, zum Basteln...


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
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:

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)
Tictac
**
Beiträge: 25
Registriert: Di, 12.01.2010 15:12

Re: Dezimal und Punkttrennung

Beitrag von Tictac »

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

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
Konkrete Fragen dazu:

1. Wie finde ich heraus welches der eingestellte DecimalSeparatorLocale ist?
2. Wie ändere ich diesen?

Vielen Dank und viele Grüße
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dezimal und Punkttrennung

Beitrag von komma4 »

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)
Tictac
**
Beiträge: 25
Registriert: Di, 12.01.2010 15:12

Re: Dezimal und Punkttrennung

Beitrag von Tictac »

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.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Dezimal und Punkttrennung

Beitrag von DPunch »

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.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Dezimal und Punkttrennung

Beitrag von balu »

Hallo Tictac,
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.
Nun, ich hab jetzt nicht die dementsprechenden Punkte selber ausgetestet, aber dennoch möchte ich dich auf folgendes hinweisen.

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?
1. Wie finde ich heraus welches der eingestellte DecimalSeparatorLocale ist?
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.

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 :D
Tictac
**
Beiträge: 25
Registriert: Di, 12.01.2010 15:12

Re: Dezimal und Punkttrennung

Beitrag von Tictac »

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.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dezimal und Punkttrennung

Beitrag von Stephan »

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?
Ist die Zahl allerdings nur 572.392 dann erkennt OOo den Punkt als Dezimaltrennzeichen und schreibt mir 572,392 in die Zelle.
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.

Gruß
Stephan
Tictac
**
Beiträge: 25
Registriert: Di, 12.01.2010 15:12

Re: Dezimal und Punkttrennung

Beitrag von Tictac »

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

Code: Alles auswählen

oImportSheet.LinkMode = 1
oImportSheet.LinkUrl = PfadReportdateiHTML
oImportSheet.LinkMode = 0
oImportSheet.setLinkURL("")
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
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Dezimal und Punkttrennung

Beitrag von Karolus »

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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Antworten