🙏 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 Marco - File Dialog für Datei Export

Alles zur Programmierung im LibreOffice.
Antworten
poor
Beiträge: 6
Registriert: Sa 13. Jun 2015, 19:55

Python Marco - File Dialog für Datei Export

Beitrag von poor » Sa 13. Jun 2015, 22:59

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
Zuletzt geändert von poor am Mo 15. Jun 2015, 13:28, insgesamt 1-mal geändert.

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Python Marco - File Dialog für Export

Beitrag von komma4 » So 14. Jun 2015, 08:46

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)
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

poor
Beiträge: 6
Registriert: Sa 13. Jun 2015, 19:55

Re: Python Marco - File Dialog für Export

Beitrag von poor » Mo 15. Jun 2015, 09:55

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

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Python Marco - File Dialog für Export

Beitrag von komma4 » Mo 15. Jun 2015, 10:54

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]
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

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

Re: Python Marco - File Dialog für Export

Beitrag von karolus » Mo 15. Jun 2015, 12:58

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]  
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

poor
Beiträge: 6
Registriert: Sa 13. Jun 2015, 19:55

Re: Python Marco - File Dialog für Export

Beitrag von poor » Mo 15. Jun 2015, 13:14

Grossartig karolus - funktioniert bestens! Ich habe noch:

Code: Alles auswählen

.appendFilter("PDF Files (.pdf)", "*.pdf")


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

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

Re: Python Marco - File Dialog für Export

Beitrag von karolus » Mo 15. Jun 2015, 13:45

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.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

poor
Beiträge: 6
Registriert: Sa 13. Jun 2015, 19:55

Re: Python Marco - File Dialog für Datei Export

Beitrag von poor » Mo 15. Jun 2015, 13:49

Orrr, stark! Vielen Dank - das hilft!


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