🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Python-Makro läuft unter libreoffice 4 nicth mehr

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
BastiL
Beiträge: 13
Registriert: So 3. Feb 2013, 10:52

Python-Makro läuft unter libreoffice 4 nicth mehr

Beitrag von BastiL » So 3. Feb 2013, 11:12

Hallo,

unter Libteoffice 4 (Gentoo Linux) macht in einem PYthon-Makro die folgende Zeile Probleme:

Code: Alles auswählen

format_waehrung = oFormats.addNew('#.##0,00 [$€-407];-#.##0,00 [$€-407]', aLocale )
Ich bekomme folgenden Fehler:
com.sun.star.uno.RuntimeException<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 182: ordinal not in range(128), traceback follows
/usr/lib64/libreoffice/program/pythonscript.py:836 in function invoke() [self.mod.__file__ + " (" + text + ")"]
Unter libeoffice3 lief das so. Irgendwas hat sich offenbar im Bezug auf unicode geändert ...

pmoegenb

Re: Python-Makro läuft unter libreoffice 4 nicth mehr

Beitrag von pmoegenb » So 3. Feb 2013, 12:42

LibO 4 befindet sich zumindest unter Windows noch in der Testphase (Release Candidat) und hier lesen keine Entwickler mit. Wende Dich bitte an die entsprechende Mailliste des Projekts.
Das derzeit aktuelle SDK für die Entwicklung von Macros hat die Version 3.6.5.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Python-Makro läuft unter libreoffice 4 nicth mehr

Beitrag von karolus » So 3. Feb 2013, 12:51

Hallo
Ja, mit LO4 wird die interne Python-version von vormals 2.6 auf 3.3 gewechselt
Beim Wechsel von Python 2 auf 3 gibts einige Änderungen.

Kannst du mal den gesamten Quelltext posten, damit man das testen kann.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

BastiL
Beiträge: 13
Registriert: So 3. Feb 2013, 10:52

Re: Python-Makro läuft unter libreoffice 4 nicth mehr

Beitrag von BastiL » So 3. Feb 2013, 15:26

Unter Linux sollte das keine Rolle spielen. Ich kompiliere libreoffice aus den Quellen gegen das System-Python (2.7.3). Also sollte da auch Python 2.7.3 verwendet werden.
Es kann natürlich sein, dass das interne Wrapper-Skript damit nicht mehr klarkommt. Was ich tun möchte ist eine Zelle in Euro formatieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, datetime
import uno
from com.sun.star.sheet.CellInsertMode import DOWN
from com.sun.star.util import Date

thisComponent = XSCRIPTCONTEXT.getDocument()
sheet = thisComponent.Sheets.getByName('Tabelle 1')
oFormats = thisComponent.NumberFormats
aLocale = thisComponent.getPropertyValue("CharLocale")

format_waehrung = oFormats.addNew('#.##0,00 [$€-407];-#.##0,00 [$€-407]', aLocale )
sheet.getCellRangeByPosition(1,1).NumberFormat = format_waehrung


Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Python-Makro läuft unter libreoffice 4 nicth mehr

Beitrag von karolus » So 3. Feb 2013, 18:20

BastiL hat geschrieben:Unter Linux sollte das keine Rolle spielen. Ich kompiliere libreoffice aus den Quellen gegen das System-Python (2.7.3). Also sollte da auch Python 2.7.3 verwendet werden.
Es kann natürlich sein, dass das interne Wrapper-Skript damit nicht mehr klarkommt. Was ich tun möchte ist eine Zelle in Euro formatieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, datetime
import uno
from com.sun.star.sheet.CellInsertMode import DOWN
from com.sun.star.util import Date

thisComponent = XSCRIPTCONTEXT.getDocument()
sheet = thisComponent.Sheets.getByName('Tabelle 1')
oFormats = thisComponent.NumberFormats
aLocale = thisComponent.getPropertyValue("CharLocale")

format_waehrung = oFormats.addNew('#.##0,00 [$€-407];-#.##0,00 [$€-407]', aLocale )
sheet.getCellRangeByPosition(1,1).NumberFormat = format_waehrung

Aus soffice heraus ist nur Code innerhalb einer Function ausführbar (zumindest übers Menü),
warum postest du Code den man gründlich überarbeiten muss um ihn zu testen :evil:


zuerst mal die Version die mit LO 3 läuft.
( ich hab alles weggelassen was für diese Function nicht benötigt wird, und zusätzlich eine 'if-Abfrage' eingebaut
um Fehler bei bereits vorhandenem Format auszuschliessen )

Code: Alles auswählen

# -*- coding: utf-8 -*-

def set_format():
    thisComponent = XSCRIPTCONTEXT.getDocument()
    sheet = thisComponent.Sheets.getByName('Tabelle1')
    oFormats = thisComponent.NumberFormats
    aLocale = thisComponent.getPropertyValue("CharLocale")
    euro_format = '#.##0,00 [$€-407];-#.##0,00 [$€-407]'.decode('utf8') # hier ist der Unterschied
    format_number = oFormats.queryKey(euro_format, aLocale, True)
    if format_number == -1:
        format_number = oFormats.addNew(euro_format, aLocale )
    cell = sheet.getCellByPosition(1,1)
    cell.NumberFormat = format_number
Für LO4 mit Python3.3 ändert sich nur eine Zeile zu:

Code: Alles auswählen


<snip>
    euro_format = '#.##0,00 [$€-407];-#.##0,00 [$€-407]'  
    # hier muss(bzw. darf) nicht mehr decodiert werden ↑↑
<snip>
 
Wenn du LO4 gegen Python2.7 compilierst könnte die obere Version funktionieren -

Du solltest dann aber mal die Pythonscripte im Programmordner mit denen aus einem LO3.? vergleichen da sind ein paar Zeilen dazugekommen um mit Py3.3 kompatibel zu werden.

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten