[gelöst] Zellen Währungsformat entspricht nicht dem Ursprungsformat

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

Moderator: Moderatoren

LiCeT
Beiträge: 2
Registriert: Fr, 30.09.2016 19:50

[gelöst] Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von LiCeT »

Hallo zusammen,

ich versuche aktuell per Makro bis zu n Dateien mit n Zeilen auszulesen. Ausschließlich die letzte Zeile jeder der Dateien ist relevant. Diese soll anschließend in eine Zeile eines Arbeitsblattes kopiert werden.

Die Dateien haben folgendes Format: <Monat>;<x1.111,11 €>;<x2.222, 22 €>;<42>

Folgendermaßen gehe ich vor:
  1. Auslesen der Datei(en)
  2. ermitteln der letzten Zeile
  3. An hand des Trenners (;) packe ich die einzelnen Felder in ein Array
  4. Schreiben der Inhalte in das (korrekte) Arbeitsblatt an die gewünschte Position; Pro Datei eine Zeilen und und vier Spalten
Soweit so gut. Das beschriebene funktioniert auch wie gewünscht. Das Format der zweiten und dritten Spalte entspricht allerdings nicht mehr dem ursprünglichen Format der Datei (x1.111,11 €) und ich komme nicht dahinter was ich falsch mache.
Der Inhalt des Arrays [ arr(i) ] entspricht dem der Datei > Ausgabe per MsgBox. Sobald die Zuweisung an das entsprechende Feld erfolgt ist "ändert" sich scheinbar das Format.

Bsp.:
1. Ausgabe Datei & Array: April;2.719,00 €;1.886,64 €;92
2. Ausgabe in Arbeitsblatt/Zelle: April 2,72 € 1,886 92[/list]

Auch die Formatierung "Format(1579.8, "#,##0.00 $")" hat irgendwie nichts gebracht.

Über Hilfe würde ich freuen!!

Gruß LiCeT
Zuletzt geändert von LiCeT am Di, 04.10.2016 21:35, insgesamt 1-mal geändert.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

mutmaßlich (aber es ist reine Raterei, weil jegliche Angaben wie ich die Zelle geschrieben wird fehlen) übergibst Du die Geldbeträge als .Value und nicht als .FormulaLocal.
Unter diesen Bedingungen kann ich hier den Fehler in OOo 3.3 nachvollziehen.

Lösung wäre somit mit (beispielsweise):

Code: Alles auswählen

<zellobjek>.FormulaLocal = "2.719,00 €"
zu arbeiten.



Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

Aber vollkommen richtig. Ich versuche es mit
*.Value.
ja, dann musst Du es logischerweise mit dem englischen Format nutzen, also:

Code: Alles auswählen

<zellobjek>.Value = 2719.00
Denn Du würdest ja auch nicht schreiben

Code: Alles auswählen

Msgbox 1,1*1,1
sondeern natürlich

Code: Alles auswählen

Msgbox 1.1*1.1

Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hallo zusammen,
ich würde es z.B. so machen:

Code: Alles auswählen

function GetLastLine
  rechnungsdatei="C:/Users/<USER>/Desktop/Input.csv"
   if FileExists("file:///"&rechnungsdatei) then
         f = FreeFile()
         Open "file:///"&rechnungsdatei for Input as #f
         Do While not eof(f)
            ' Read line 
             Line Input #f, CurrentLine
            If CurrentLine <>"" then
            LastLine = CurrentLine
            end if
         Loop
         Close #f
         LastLine = Replace(LastLine," €","")
         LastLine = Replace(LastLine,".","")
         LastLine = Split(LastLine,";")
         dim aRow(0)
         aRow(0) = Array(LastLine(0),cdbl(LastLine(1)),cdbl(LastLine(2)),cdbl(LastLine(3)))
         GetLastLine = aRow
    endif
end function

Sub Fill_data
    oSheet = Thiscomponent.Sheets(0)
    oColumn = oSheet.columns.getbyName("A")
    nRow = oColumn.queryEmptyCells().RangeAddresses(0).StartRow
    oTargetRange = oSheet.getcellrangebyposition(0,nRow,3,nRow)
    oTargetRange.setDataArray(GetLastLine)
end sub
D.h. es werden wirklich Zahlen als .Value gesetzt, die Währungszellen müssen nur richtig formatiert werden um sie wieder als € zu sehen.
Vorteil: Man kann damit Berechnungen anstellen. Bleibt das Währungssymbol in der Zelle, ist es ein Text, mit dem man nicht rechnen kann.

Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

Bleibt das Währungssymbol in der Zelle, ist es ein Text, mit dem man nicht rechnen kann.
Deswegen mein Vorschlag mit .FormulaLocal:

Code: Alles auswählen

<zellobjek>.FormulaLocal = "2.719,00 €"
denn da steht anschließend eine bereits richtig formatierte Zahl in der Zelle, und kein Text, weil OO/LO die Umwandlung des übergebenen Ausdrucks selbstständig vornimmt.

Dieses Vorgehen ist insbesondere deshalb zweckmäßig weil es auch den Aufwand spart die Zelle, nach der Übergabe mittels .Value, getrennt formatieren zu müssen (denn Letzteres erfordert die Übergabe eines Zellformates an die Zelle und nicht wie vom Ausgangsposter augenscheinlich vermutet eine Formatierung nur auf Basic-Ebene)


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hallo Stephan
Stephan hat geschrieben:weil OO/LO die Umwandlung des übergebenen Ausdrucks selbstständig vornimmt
Das habe ich nicht gewußt, Danke für den Hinweis.
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

nochmal zu der Frage "Zweckmäßigkeit": ich wollte einen Beispielcode hinschreiben, der deutlich macht wie umständlich es ist ein Zahlenformat für eine Zelle wirklich korrekt anzubringen, denn korrekterweise geht das über die Format_ID und man müsste deshalb vorab prüfen ob ein bestimmter Formatcode bereits verwendet wird, also dafür eine Format_ID existiert.
Ich bekomme nur die Prüfung nicht hin, keine Ahnung was ich falsch mache.

Das Folgende funktioniert NICHT:

Code: Alles auswählen

Sub Format_abfragen()
	Dim local_setting As New com.sun.star.lang.Locale
	local_setting.Language = "de"
	local_setting.Country = "DE"
	
	formate = ThisComponent.getNumberFormats()
	
	Msgbox formate.queryKey("#.##0,00 [$€-407];-#.##0,00 [$€-407]", local_setting, True)
	
End Sub
d.h. die Msgbox liefert -1.


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hallo Stephan,
so geht es:

Code: Alles auswählen

Sub Format_abfragen()
   Dim local_setting As New com.sun.star.lang.Locale
   formate = ThisComponent.getNumberFormats()
   Msgbox formate.queryKey("#.##0,00 [$€-407];-#.##0,00 [$€-407]", local_setting, True)
End Sub
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

so geht es:
bei mir nicht, das gleiche Makro hatte ich auch selbst ursprünglich schon getestet.

Es geht auch nur um den konkreten Formatcode, denn mit diversen anderen Formatcodes geht es ja, z.B.:

Code: Alles auswählen

Sub Format_abfragen()
   Dim local_setting As New com.sun.star.lang.Locale
   formate = ThisComponent.getNumberFormats()
   Msgbox formate.queryKey("0,00", local_setting, True)
End Sub
Der Punkt ist hat nur das der benannte Formatcode einer der Standardcode ist und auch in der GUI konkret verfügbar, er müsste also per Makro abrufbar sein und die Rückgabe der Msgbox sollte 109 sein, wie ich aus:
https://www.amazon.de/OpenOffice-Progra ... 3446404503

ersehen kann.
Sorry für die komische Quelle, ich weiß nur momentan nicht wo sonst noch eine Übersicht ist, im Pitonyak-Dokument finde ich nur eine Teilübersicht der Zahlenformat-IDs


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hi,
welche Version von AOO/LOO hast Du verwendet?
Betriebssystem?
Ich kann es bei mir nochmal versuchen.
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

F3K Total hat geschrieben:Hi,
welche Version von AOO/LOO hast Du verwendet?
Betriebssystem?
Ich kann es bei mir nochmal versuchen.
Gruß R
OOo 3.3.0 und AOO 4.1.2 unter Windows 7 Professional, alles deutsch (Deutschland) lokalisiert.


Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hallo Stephan,
habe per Versuch herausgefunden, dass das Format dann gefunden wird, wenn es bereits einer Zelle zugeordnet worden ist.
Gruß R
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von Stephan »

habe per Versuch herausgefunden, dass das Format dann gefunden wird, wenn es bereits einer Zelle zugeordnet worden ist
Danke, interessant. Dann sind die Numbering-Standardformate augenscheinlich nur Teil der OpenOffice-Installation und nicht Teil jeder erstellten Datei, sondern nur die genutzten Formate gehen in die Datei ein.



Gruß
Stephan
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

... so schätze ich es auch ein ...
Gruß R
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Zellen Währungsformat entspricht nicht dem Ursprungsformat

Beitrag von F3K Total »

Hallo Stephan,
ich denke wir liegen etwas falsch, wenn man z.B. diesen "alten" Formatcode nimmt,

Code: Alles auswählen

"#.##0,-- [$DM-407];[ROT]-#.##0,-- [$DM-407]"
, funktioniert es auch ohne eine so formatierte Zelle. Ich denke, es muss irgendwie damit zusammenhängen, dass es bei den Währungen besonders kompliziert ist. Es gibt im Dialog über der Spalte Format, noch ein zusätzliches Listenfeld, mit dem sich die Währung landesspezifisch einstellen läßt.
Mein Schluss: Die Formatcodes für Währungen, bis auf einige Standardcodes, werden dann angelegt, wenn sie wenigstens einmal verwendet werden. Man kann den "neuen" Code mit Xray analysieren, und findet die Eigenschaft

Code: Alles auswählen

 .UserDefined = True
Die "festen" de_DE Codes habe ich mit diesem Makro ausgelesen:

Code: Alles auswählen

Sub get_format_codes
   Dim nKey as long
   Dim local_setting As New com.sun.star.lang.Locale
   'local_setting.Language = "de"
   'local_setting.Country = "DE"
   formate = ThisComponent.NumberFormats
   aFormats = formate.queryKeys(0,local_setting,false)
   osheet = ThisComponent.Sheets(0)
   for i = 0 to ubound(aFormats)
        nKey = aFormats(i)
        oCellKey = osheet.getCellbyposition(0,i+1)
        oCellKey.value = nKey
        oCell = osheet.getCellbyposition(1,i+1)
        oCell.string = formate.getbyKey(nKey).FormatString
   next i
End Sub
Ergebnis:

Code: Alles auswählen

     KEY     |Formatcode LO 5.1.5                        |Formatcode AOO 4.1.2                       
      0      |Standard                                   |Standard                                   
      1      |0                                          |0                                          
      2      |0,00                                       |0,00                                       
      3      |#.##0                                      |#.##0                                      
      4      |#.##0,00                                   |#.##0,00                                   
      5      |#.###,00                                   |#.###,00                                   
      10     |0%                                         |0%                                         
      11     |0,00%                                      |0,00%                                      
      20     |#.##0 DM;-#.##0 DM                         |#.##0 DM;-#.##0 DM                         
      21     |#.##0,00 DM;-#.##0,00 DM                   |#.##0,00 DM;-#.##0,00 DM                   
      22     |#.##0 DM;[ROT]-#.##0 DM                    |#.##0 DM;[ROT]-#.##0 DM                    
      23     |#.##0,00 DM;[ROT]-#.##0,00 DM              |#.##0,00 DM;[ROT]-#.##0,00 DM              
      24     |#.##0,00 CCC                               |#.##0,00 CCC                               
      25     |#.##0,-- DM;[ROT]-#.##0,-- DM              |#.##0,-- DM;[ROT]-#.##0,-- DM              
      30     |TT.MM.JJ                                   |TT.MM.JJ                                   
      31     |NN TT.MMM JJ                               |NN TT.MMM JJ                               
      32     |MM.JJ                                      |MM.JJ                                      
      33     |TT.MMM                                     |TT.MMM                                     
      34     |MMMM                                       |MMMM                                       
      35     |QQ JJ                                      |QQ JJ                                      
      36     |TT.MM.JJJJ                                 |TT.MM.JJJJ                                 
      37     |TT.MM.JJ                                   |TT.MM.JJ                                   
      38     |NNNNT. MMMM JJJJ                           |NNNNT. MMMM JJJJ                           
      39     |T. MMM JJ                                  |T. MMM JJ                                  
      40     |HH:MM                                      |HH:MM                                      
      41     |HH:MM:SS                                   |HH:MM:SS                                   
      42     |HH:MM AM/PM                                |HH:MM AM/PM                                
      43     |HH:MM:SS AM/PM                             |HH:MM:SS AM/PM                             
      44     |[HH]:MM:SS                                 |[HH]:MM:SS                                 
      45     |MM:SS,00                                   |MM:SS,00                                   
      46     |[HH]:MM:SS,00                              |[HH]:MM:SS,00                              
      50     |TT.MM.JJ HH:MM                             |TT.MM.JJ HH:MM                             
      51     |TT.MM.JJJJ HH:MM:SS                        |TT.MM.JJJJ HH:MM:SS                        
      60     |0,00E+000                                  |0,00E+000                                  
      61     |0,00E+00                                   |0,00E+00                                   
      70     |# ?/?                                      |# ?/?                                      
      71     |# ??/??                                    |# ??/??                                    
      72     |# ?/4                                      |
      73     |# ??/100                                   |
      75     |T. MMM JJJJ                                |T. MMM JJJJ                                
      76     |T. MMMM JJJJ                               |T. MMMM JJJJ                               
      77     |NN, T. MMM JJ                              |NN, T. MMM JJ                              
      78     |NN, T. MMMM JJJJ                           |NN, T. MMMM JJJJ                           
      79     |NNNNT. MMMM JJJJ                           |NNNNT. MMMM JJJJ                           
      80     |T. MMM. JJJJ                               |T. MMM. JJJJ                               
      81     |T. MMMM JJJJ                               |T. MMMM JJJJ                               
      82     |MM-TT                                      |MM-TT                                      
      83     |JJ-MM-TT                                   |JJ-MM-TT                                   
      84     |JJJJ-MM-TT                                 |JJJJ-MM-TT                                 
      85     |WW                                         |WW                                         
      99     |LOGISCH                                    |LOGISCH                                    
     100     |@                                          |@                                          
     101     |#.##0 [$DM-407];-#.##0 [$DM-407]           |#.##0 [$DM-407];-#.##0 [$DM-407]           
     102     |#.##0,00 [$DM-407];-#.##0,00 [$DM-407]     |#.##0,00 [$DM-407];-#.##0,00 [$DM-407]     
     103     |#.##0 [$DM-407];[ROT]-#.##0 [$DM-407]      |#.##0 [$DM-407];[ROT]-#.##0 [$DM-407]      
     104     |#.##0,00 [$DM-407];[ROT]-#.##0,00 [$DM-407]|#.##0,00 [$DM-407];[ROT]-#.##0,00 [$DM-407]
     105     |#.##0,-- [$DM-407];[ROT]-#.##0,-- [$DM-407]|#.##0,-- [$DM-407];[ROT]-#.##0,-- [$DM-407]
     106     |##0,00E+00                                 |#.##0,00 [$€-407];[ROT]-#.##0,00 [$€-407]  
     108     |#.##0,00 [$€-407];[ROT]-#.##0,00 [$€-407]  |
Beide haben nur einen festen Code mit Euro Symbol.
72,73 fehlen bei AOO, 106 ist anders definiert als bei LO.
Gruß R
Antworten