Seite 1 von 1
Python-Makro läuft unter libreoffice 4 nicth mehr
Verfasst: So 3. Feb 2013, 11:12
von BastiL
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 ...
Re: Python-Makro läuft unter libreoffice 4 nicth mehr
Verfasst: So 3. Feb 2013, 12:42
von pmoegenb
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.
Re: Python-Makro läuft unter libreoffice 4 nicth mehr
Verfasst: So 3. Feb 2013, 12:51
von karolus
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
Re: Python-Makro läuft unter libreoffice 4 nicth mehr
Verfasst: So 3. Feb 2013, 15:26
von BastiL
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
Re: Python-Makro läuft unter libreoffice 4 nicth mehr
Verfasst: So 3. Feb 2013, 18:20
von karolus
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
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