Basic-Makro aus Python aufrufen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Basic-Makro aus Python aufrufen

Re: Basic-Makro aus Python aufrufen

von Blaimi » Mi, 11.02.2009 17:54

Muhahah..... :-D

Code: Alles auswählen

def write_pdf(doc, path):
  try:
    oGS = doc.ScriptProvider.getScript("vnd.sun.star.script:Standard.Pagebreak.InsertPagebreak?language=Basic&location=document")
    oGS.invoke((),(),())
  except:
    sys.stdout.write("Marko nicht vorhanden")

  out_props = (
    PropertyValue("FilterName", 0, "writer_pdf_Export", 0),
    PropertyValue("Overwrite", 0, True, 0),
    )
  (dest, ext) = splitext(path)
  dest = dest + ".pdf"
  dest_url = absolutize(systemPathToFileUrl(getcwd()), systemPathToFileUrl(dest))
  sys.stderr.write(dest_url + "\n")
  doc.storeToURL(dest_url, out_props)
  doc.dispose()
Zu beachten ist, dass unter except irgendwas dran steht, ist wohl sonst ein syntax-fehler.... weiß jemand, wie ich das weg bekommen kann? Ich will ja, dass der Fehler dann einfach ignoriert wird. Oder gibts irgendeine Dummy-Funktion, die man hinschreiben könnte, und einfach nichts tut?

Blaimi

Re: Basic-Makro aus Python aufrufen

von Blaimi » Mi, 11.02.2009 17:26

so, problematisch wird das ganze jetzt aber, wenn das Makro nicht existiert, das kommt aber ab und zu mal vor, dann bricht alles mit einer Fehlermeldung ab. Das einzige was ich dazu gefunden hab, wie man nach einem Makro suchen kann, ist hier. Das ist aber ein ziemlich großer Aufwand und dauert sehr lange zum durchlaufen, und ich bin der Python-Sprache nicht wirklich mächtig. Hat jemand einen Vorschlag, die ich das machen könnte? Entweder muss der Fehler ignoriert werden, oder vorher auf Existenz des Makros geprüft werden.

Danke

Blaimi

Re: Basic-Makro aus Python aufrufen

von Blaimi » Do, 05.02.2009 19:43

Code: Alles auswählen

  oGS = doc.ScriptProvider.getScript("vnd.sun.star.script:Standard.Module.Sub?language=Basic&location=document")
  oGS.invoke((),(),())
So siehts aus!

Man muss dabei dann aber darauf achten, dass im Makro oDoc nicht als starDesktop.currentComponent sondern als thisComponent definiert wird. Ist klar, weil es gibt ja quasi keinen star-desktop....

Basic-Makro aus Python aufrufen

von Blaimi » Mi, 04.02.2009 20:17

Tach auch!

Ich habe hier ein Programm, das über die UNO-Schnittstelle per python auf OOo zugreift, und meine Dateien verändert, neu speichert usw. Jetzt will ich ein Basic-Makro (in der Datei gespeichert) von dieser Schnittstelle aus ausführen lassen. Wie lautet der Befehl dazu?

Der Python-Code, vor dem unmittelbar das Basic-Makro ausgeführt werden soll sieht folgendermaßen aus:

Code: Alles auswählen

def write_pdf(doc, path):
  out_props = (
    PropertyValue("FilterName", 0, "writer_pdf_Export", 0),
    PropertyValue("Overwrite", 0, True, 0),
    )
  InsertSubtotal
  (dest, ext) = splitext(path)
  dest = dest + ".pdf"
  dest_url = absolutize(systemPathToFileUrl(getcwd()), systemPathToFileUrl(dest))
  sys.stderr.write(dest_url + "\n")
  doc.storeToURL(dest_url, out_props)
  doc.dispose()
ich will quasi vor dem Abspeichert das Makro [Datei].Standard.Modul.Sub ausführen.

Falls das nicht gehen sollte, wie kann ich das Makro von Basic nach Python konvertieren? Das will ich aber eigentlich vermeiden, da ich nicht der einzige bin, der auf das Makro zugreift, und es als Basic-Makro wesentlich einfacher zu handhaben ist, da nur die eine Datei betroffen ist.

Vielen Dank

Blaimi

Nach oben