Dezimal und Punkttrennung

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Dezimal und Punkttrennung

Re: Dezimal und Punkttrennung

von Karolus » Mo, 27.06.2011 11:18

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

Re: Dezimal und Punkttrennung

von Tictac » Mo, 27.06.2011 10:59

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

Re: Dezimal und Punkttrennung

von Stephan » Mo, 27.06.2011 09:24

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

Re: Dezimal und Punkttrennung

von Tictac » Mo, 27.06.2011 08:41

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.

Re: Dezimal und Punkttrennung

von balu » Fr, 24.06.2011 23:10

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

Re: Dezimal und Punkttrennung

von DPunch » Fr, 24.06.2011 20:13

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.

Re: Dezimal und Punkttrennung

von Tictac » Fr, 24.06.2011 16:31

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.

Re: Dezimal und Punkttrennung

von komma4 » Fr, 24.06.2011 13:34

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.

Re: Dezimal und Punkttrennung

von Tictac » Fr, 24.06.2011 11:49

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

Re: Dezimal und Punkttrennung

von komma4 » Fr, 24.06.2011 10:21

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!

Dezimal und Punkttrennung

von Tictac » Fr, 24.06.2011 09:28

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.

Nach oben