GELÖST: Addition wird nich in Zelle geschrieben

Alles zur Programmierung im LibreOffice.
Antworten
Ulrich
Beiträge: 11
Registriert: Do 2. Jan 2020, 13:46

GELÖST: Addition wird nich in Zelle geschrieben

Beitrag von Ulrich » Mi 15. Jan 2020, 17:32

Hi,
Ich nöchte die ermittelten "Point to Point" Meter aus L3 al "Ges.-Km" nach O3 schreiben.
Ges_km.PNG
Ges_km.PNG (6.62 KiB) 85 mal betrachtet
oZelle = oSheet.getCellByPosition (11,x)
oZelle.numberFormat(2)
oZelle.Value = nPoint_Dif


nPoint_Dif_Zae = nPoint_Dif_Zae + (nPoint_Dif /1000)

Print nPoint_Dif, nPoint_Dif_Zae ->Inhalte der Variablen werden korrekt angezeigt.

oZelle = oSheet.getCellByPosition (14,x)
oZelle.numberFormat(2)
oZelle.Value = ??Point_Dif_Zae

Zellformat und Type habe ich ausgelesen.
Die Splte ist al Dezimalzahl mit 4 nachkommastellen vorformatiert.

Hat jemand eine Idee was los sein könnte.

Grüße Ulrich
Zuletzt geändert von Ulrich am Do 16. Jan 2020, 20:06, insgesamt 1-mal geändert.

craig
Beiträge: 476
Registriert: Do 21. Apr 2016, 11:42

Re: Addition wird nich in Zelle geschrieben

Beitrag von craig » Mi 15. Jan 2020, 18:45

Hallo Ulrich,

der NumberFormat wird nicht korrekt zugewiesen.

Ausserdem findet keine Prüfung statt, ob der betreffende
NumberFormat-Schlüssel bereits existiert.
Das kann zu Problemen z.B. in Form von Laufzeitfehler führen.

Code: Alles auswählen

oZelle.numberFormat(2)
Die angegebene Konstante (2) ist also falsch.


Beispiel Code zum zuweisen des NumberFormats und
zum anzeigen des NumberFormat-Schlüssels.

Code: Alles auswählen

Dim oLocalSettings As New com.sun.star.lang.Locale

REM !!!!!!!!!!!!!!!!!!!!!!!!!!!
REM Damit der nachfolgende Code funktioniert, muss diese 
REM noch um die Dokument, Sheet und Zellreferenzen erweitert werden!
REM oDoc=ThisComponent
REM oSheet= ...
REM oZelle = ...
REM !!!!!!!!!!!!!!!!!!!!!!

oLocalSettings.language = "de"
oLocalSettings.country = "de"

oNumberFormats = thiscomponent.numberFormats

REM NumberFormat = 3 Nachkommastellen
lKey = oNumberFormats.queryKey("0,000", oLocalSettings , true)

REM Wenn der NumberFormat-Schlüssel nicht existiert = -1, 
REM dann NumberFormat-Schlüssel neuanlegen
If lKey = -1 then 
    lKey = oNumberFormats.addNew("0,000", oLocalSettings)
end if

REM NumberFormat-Schlüssel der Zelle zuweisen
oCell.NumberFormat = lKey

REM Lasse Dir per Print-Anweisung die Format-
REM konstante anzeigen, dann erkennst Du, dass 
REM oZelle.numberFormat(2)
REM falsch ist. 
Print lKey
Lese auch die Kommentare im Code.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 6.3.4.2 (x64) • AOO 4.1.6

Ulrich
Beiträge: 11
Registriert: Do 2. Jan 2020, 13:46

Re: Addition wird nich in Zelle geschrieben

Beitrag von Ulrich » Do 16. Jan 2020, 20:04

Hi Craig,

bisher habe ich mich an die Info über die Formateinstellung an die ausführliche
Beschreibung von Dannenhoefer orientiert.

Nun habe ich deine Empfehlung eingebaut und mit Print überbrüft. Jetzt läuft auch die zusätzliche Spalte rund.
Bei der Überprüfung mit Print wurden unterschiedliche Antworten gegeben. Für "Standard-Dezimalzahl "20002", für die festgelegten nachkommastellen "20107".
Wo finde ich Info über die Formstierungswerte mit Angaben wie die zu verwenden sind.

Grüße Ulrich

craig
Beiträge: 476
Registriert: Do 21. Apr 2016, 11:42

Re: GELÖST: Addition wird nich in Zelle geschrieben

Beitrag von craig » Do 16. Jan 2020, 20:59

Hallo Ulrich,
Ulrich hat geschrieben:bisher habe ich mich an die Info über die Formateinstellung an die ausführliche
Beschreibung von Dannenhoefer orientiert.
  1. Dazu merke ich als erstes an, dass die Seite sehr gut ist.
    Aber auch etwas betagt, besonders wenn es um LibreOffice geht.
    Die API von OpenOffice und LibreOffice bewegen sich langsam, aber sicher
    auseinander. Dies fürht dazu, dass eigene Programme unter LibreOffice
    einwandfrei laufen, aber in OpenOffice nicht und umgekehrt.
  2. Wenn Du den Code vo Dannenhöfer nutzt, dann musst Du diesen auch
    genauso verwenden.
    In Deinem Code:

    Code: Alles auswählen

    oZelle.numberFormat(2)
    Bei Dannenhöfer so:

    Code: Alles auswählen

    mycell.NumberFormat=0
    Damit meine ich nicht den Namen der Variablen (myCell oder oZelle),
    sondern die Anweisung ".NumberFormat=0", oder auch ".NumberFormat=2",
    Auf der Seite wo dieses steht, sind auch einige CellFlags (NumberFormat Konstanten")aufgelistet.

    Wenn nun ein eigenes Format (z.B. 3 Nachkommastellen) generiert werden soll,
    dann muss dieses erst im Code vorbereitet werden.
    Ebenso, wie ich es in meinem Beispielcode beschrieben habe.
  3. Daraufhin wird eine neue Konstante angelegt.
    Bei Dir war es: 20107
    Wenn ich den Code ausführe, dann ist es die Konstante: 10107
    Wie hier die Zusammenhänge sind, kann ich nicht genau sagen.
    Ich vermute, dass die nächstfreie Konstante genommen wird,
    um neue Zahlenformate zu zuweisen.
    Bei der zuvor verlinkten Dannenhöfer-Seite, siehst Du unter "Währung"
    die Schlüssel/ Konstanten 106 | 108 | 109 | 110
    107 fehlt.
Hier ein Auszug aus der LibreOffice API...
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 6.3.4.2 (x64) • AOO 4.1.6

Antworten