Seite 1 von 1
Python Marco - File Dialog für Datei Export
Verfasst: Sa 13. Jun 2015, 22:59
von poor
Hallo LibreOffice Freunde,
ich probiere eine Pdf mit einem Makro zu exportieren und brauche einen File-Dialog. Ich habe bereits diesen gefunden:
http://openoffice3.web.fc2.com/Python_M ... OOoGDlg14a.
Ist es auch möglich den Standard-File-Dialog in einem Makro aufzurufen um den Benutzer nicht unnötig zu verwirren?
Vielen Dank für eure Hilfe,
Christian
Re: Python Marco - File Dialog für Export
Verfasst: So 14. Jun 2015, 08:46
von komma4
Ja, gibt es:
Code: Alles auswählen
oCtx = uno.getComponentContext()
oServiceManager = oCtx.ServiceManager
oFilePicker = \
oServiceManager.createInstanceWithArgumentsAndContext(
'com.sun.star.ui.dialogs.FilePicker',
(FILESAVE_SIMPLE,),
oCtx
)
oFilePicker.Title = 'Exportieren als...'
oFilePicker.execute()
Quelle:
OpenOffice.org Wiki
(mag keine zu langen Zeilen, deshalb umgebrochen)
Re: Python Marco - File Dialog für Export
Verfasst: Mo 15. Jun 2015, 09:55
von poor
Danke Winfried,
leider stürzt LibreOffice nach dem Ausführen des Scripts ab und ich kann den Pfad nicht auslesen:
Code: Alles auswählen
import os
import uno
import sys
import traceback
from com.sun.star.ui.dialogs.TemplateDescription import FILESAVE_SIMPLE
def file_dialog():
try:
oCtx = uno.getComponentContext()
oServiceManager = ctx.getServiceManager()
oFilePicker = oServiceManager.createInstanceWithArgumentsAndContext(
'com.sun.star.ui.dialogs.FilePicker',
(FILESAVE_SIMPLE,),
oCtx
)
oFilePicker.Title = 'Export as'
#oDisp = oFilePicker.Text
oFilePicker.execute()
except:
pass
#oDisp = traceback.format_exc(sys.exc_info()[2])
Es gibt wirklich wenig Doku - weis nicht so richtig was ich tun soll...
Trotzdem vielen Dank,
Christian
Re: Python Marco - File Dialog für Export
Verfasst: Mo 15. Jun 2015, 10:54
von komma4
poor hat geschrieben:Es gibt wirklich wenig Doku - weis nicht so richtig was ich tun soll...
a) Schau' Dir die Beispiele in StarBasic an - soviel Unterschied gibt es nicht, zu Python (mit Ausnahme der im OOWiki erwähnten Sachen)
b) einen Fehlerreport erstellen! Der Code läuft unter AOO 4.x einwandfrei, ich sehe keinen Grund, warum er das unter LO 4 nicht auch tun sollte.
Ich arbeite hauptsächlich mit AOO - auch bei mir stürzt das Makro (nach Auslösen der "Sichern" Taste) ab
[Sorry, wenn ich Dich da über's Wochenende auf eine "falsche" Fährte gelockt haben sollte - ich hätte das Makro mit LO schon letzte Woche probieren sollen: my fault]
Re: Python Marco - File Dialog für Export
Verfasst: Mo 15. Jun 2015, 12:58
von karolus
Hallo
hier mal komplett (getestet mit LO4.4)
Code: Alles auswählen
import uno
from com.sun.star.beans import PropertyValue
#shortcut:
createUnoService = (
XSCRIPTCONTEXT
.getComponentContext()
.getServiceManager()
.createInstance
)
def pypdf_test():
desktop = XSCRIPTCONTEXT.getDesktop()
doc = desktop.getCurrentComponent()
# filter data
fdata = []
fdata1 = PropertyValue()
fdata1.Name = "SelectPdfVersion"
fdata1.Value = 1
fdata2 = PropertyValue()
fdata2.Name = "Quality"
fdata2.Value = 100
fdata.append(fdata1)
fdata.append(fdata2)
args = []
arg1 = PropertyValue()
arg1.Name = "FilterName"
arg1.Value = "writer_web_pdf_Export"
arg2 = PropertyValue()
arg2.Name = "FilterData"
arg2.Value = uno.Any("[]com.sun.star.beans.PropertyValue", tuple(fdata) )
args.append(arg1)
args.append(arg2)
fileurl = FilePicker()
if fileurl:
doc.storeToURL( fileurl, tuple(args) )
def FilePicker(path=None, mode=1):
"""
Datei öffnen: `mode in (0, 6, 7, 8, 9)`
Datei Schreiben `mode in (1, 2, 3, 4, 5, 10)`
see: ('''http://api.libreoffice.org/docs/idl/ref/
namespacecom_1_1sun_1_1star_1_1ui_1_1
dialogs_1_1TemplateDescription.html''' )
"""
filepicker = createUnoService( "com.sun.star.ui.dialogs.OfficeFilePicker" )
if path:
filepicker.setDisplayDirectory(path )
filepicker.initialize( ( mode,) )
if filepicker.execute():
return filepicker.getFiles()[0]
Re: Python Marco - File Dialog für Export
Verfasst: Mo 15. Jun 2015, 13:14
von poor
Grossartig karolus - funktioniert bestens! Ich habe noch:
für die pdfs hinzugefügt
Code: Alles auswählen
import uno
from com.sun.star.beans import PropertyValue
#shortcut:
createUnoService = (
XSCRIPTCONTEXT
.getComponentContext()
.getServiceManager()
.createInstance
)
def pypdf_test():
desktop = XSCRIPTCONTEXT.getDesktop()
doc = desktop.getCurrentComponent()
# filter data
fdata = []
fdata1 = PropertyValue()
fdata1.Name = "SelectPdfVersion"
fdata1.Value = 1
fdata2 = PropertyValue()
fdata2.Name = "Quality"
fdata2.Value = 100
fdata.append(fdata1)
fdata.append(fdata2)
args = []
arg1 = PropertyValue()
arg1.Name = "FilterName"
arg1.Value = "writer_web_pdf_Export"
arg2 = PropertyValue()
arg2.Name = "FilterData"
arg2.Value = uno.Any("[]com.sun.star.beans.PropertyValue", tuple(fdata) )
args.append(arg1)
args.append(arg2)
fileurl = FilePicker()
if fileurl:
doc.storeToURL( fileurl, tuple(args) )
def FilePicker(path=None, mode=1):
"""
Datei öffnen: `mode in (0, 6, 7, 8, 9)`
Datei Schreiben `mode in (1, 2, 3, 4, 5, 10)`
see: ('''http://api.libreoffice.org/docs/idl/ref/
namespacecom_1_1sun_1_1star_1_1ui_1_1
dialogs_1_1TemplateDescription.html''' )
"""
filepicker = createUnoService( "com.sun.star.ui.dialogs.OfficeFilePicker" )
if path:
filepicker.setDisplayDirectory(path)
filepicker.initialize( ( mode,) )
filepicker.appendFilter("PDF Files (.pdf)", "*.pdf")
if filepicker.execute():
return filepicker.getFiles()[0]
Abschließende Frage: Kannst du mir erkären was der
UnoService macht?
Vielen, vielen Dank für die Hilfe,
Christian
Re: Python Marco - File Dialog für Export
Verfasst: Mo 15. Jun 2015, 13:45
von karolus
Abschließende Frage: Kannst du mir erkären was der UnoService macht?
wenn du den konkreten Service:
"com.sun.star.ui.dialogs.OfficeFilePicker" meinst - dafür gibts die sdk-Dokumentation:
Filepicker
Falls du in dem Bereich eher """selbstständig""" arbeiten möchtest, empfehle ich
MRI zur Objekt-Inspektion.
Re: Python Marco - File Dialog für Datei Export
Verfasst: Mo 15. Jun 2015, 13:49
von poor
Orrr, stark! Vielen Dank - das hilft!