❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ 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. 🤗

Makro: Datei unter mehreren Formaten abspeichern

WRITER hat alles, was Sie von einer modernen, voll ausgestatteten Textverarbeitung erwarten.
Mau
* LO-Experte *
Beiträge: 460
Registriert: Do 14. Feb 2013, 19:37

Makro: Datei unter mehreren Formaten abspeichern

Beitrag von Mau » So 11. Jan 2015, 19:53

Liebe ExpertInnen,

ich muss eine ODT-Datei ziemlich oft zusätzlich in drei verschiedenen anderen Formaten abspeichern:
doc; txt; pdf
  • Die doc-Datei brauchen Kunden zum Weiterverarbeiten.
  • Die txt-Datei braucht mein Datei-Manager FreeCommander für Volltextsuche.
  • Die pdf-Datei brauchen Kunden zur Kontrolle des Layouts, falls ihnen beim Weiterverarbeiten mal etwas durcheinandergerät.
Ich habe mal zwei Test-Makros bei einer Muster-Datei laufen lassen (s. Dateianhang).

Der Makro bringt aber nur Nutzen, wenn er den jeweiligen Dateinamen mit Pfad ausliest und an eine Variable übergibt, durch die der Beispielfpfad und -name ersetzt wird.
Und außerdem gibt es möglicherweise noch ein Problem: So wie die beiden Makros jetzt aufeinanderfolgen, würde der zweite Durchlauf wahrscheinlich nicht die odt-Datei, sondern die vorher erzeugte txt-Datei ins doc-Format verwandeln. D.h. die odt-Datei müsste vorher wieder geöffnet worden sein.

Ich verstehe leider von VBA zu wenig, um das selbst zurechtzubasteln.

Gruß,
Mau
Dateianhänge
ODT-Makro Formate speichern.odt
(33.02 KiB) 218-mal heruntergeladen
Betriebssystem: Windows 10 (x64)

LO-Version: 6.2.8.2 (x64)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von lessger » Mo 12. Jan 2015, 11:03

Hallo Mau,

ich habe im Moment keine Zeit, Dir das Makro zu schreiben, aber vielleicht helfen Dir die folgenden Tipps (oder es meldet sich sonst noch jemand):
  • Das Makro ist einfacher, wenn das Dokument bereits im .odt-Format gespeichert ist.
  • Dann kannst Du mit ThisComponent.GetURL() den vollständigen Dateipfad bekommen
  • Dann kannst Du mit GetFileNameWithoutExtension(...) den Dateinamen extrahieren und durch Hinzufügen eines anderen Typs den neuen Dateinamen zusammen bauen. (siehe http://www.dannenhoefer.de/faqstarbasic ... tools.html)
  • Dann rufst Du Deine Makros für Speichern als txt and doc auf, natürlich unter Nutzung der neuen Dateinamen
Umständlicher wird es, wenn Du auch den Fall abdecken willst, daß das Dokument noch nie gespecihert war (also "Unbenannt-x" heißt).

Ich hoffe, das hilft schon mal.

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Mau
* LO-Experte *
Beiträge: 460
Registriert: Do 14. Feb 2013, 19:37

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von Mau » Mo 12. Jan 2015, 13:38

Lieber Gerhard,
vielen Dank erst einmal für die Hinweise.
lessger hat geschrieben:
  • Das Makro ist einfacher, wenn das Dokument bereits im .odt-Format gespeichert ist.
Das ist es. Ich möchte den Makro aus dem Dokument heraus starten können, das zusätzlich in den drei anderen Formaten abgespeichert werden soll.
lessger hat geschrieben:
  • Dann kannst Du mit ThisComponent.GetURL() den vollständigen Dateipfad bekommen.
Der automatisch erzeugte Makro (s. meinen Dateianhang im ersten Beitrag) hat u.a. folgende Zeile:
document = ThisComponent.CurrentController.Frame
Ich dachte, damit würde der komplette Dateipfad bereits übergeben. Wenn das nicht der Fall ist, wozu dient die Zeile dann?
Und heißt die richtige Übergabe des Dateipfades dann vielleicht so:
document = ThisComponent.GetURL() ?
Oder muss ich dafür erst eine neue Variable deklarieren und verwenden?
lessger hat geschrieben:
Nach dem, was mein Makro schreibt, nehme ich an, dass der neue Dateiname sich aus drei Komponenten zusammensetzt:
"file:///" + GetFileNameWithoutExtension + ".txt") bzw. ".doc" bzw. ".pdf"
Richtig?
(Allerdings hat der Makro für die Abspeicherung in pdf einen schier endlosen Rattenschwanz von Attributen erzeugt, die wohl alle mit angegeben werden müssen. Dann sollte ich davon wahrscheinlich die Finger lassen.)
Wie baut man die drei Komponenten - vorausgesetzt, sie sind so richtig - zu einem einzigen String zusammen?
Den Befehl dazu fand ich unter dem von dir angegebenen Link nicht.
lessger hat geschrieben:
  • Dann rufst Du Deine Makros für Speichern als txt and doc auf, natürlich unter Nutzung der neuen Dateinamen
[/list][/list]
Also so:?
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///" + document + ".txt"
args1(1).Name = "FilterName"
args1(1).Value = "Text"

dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())

Gruß,
Mau
Betriebssystem: Windows 10 (x64)

LO-Version: 6.2.8.2 (x64)

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von mikele » Mo 12. Jan 2015, 20:25

Hallo,
anbei eine Variante.
Das Makro exportiert die Datei in den gleichen Ordner wie die Originaldatei einmal als pdf und einmal als txt. Die Datei selbst bleibt odt.
Beim pdf-export habe ich es bei den Standardexportoptionen belassen (ansonsten musst du den "Rattenschwanz" mit als Parameter übergeben).
Dateianhänge
test_speichern.odt
(9.91 KiB) 247-mal heruntergeladen
Gruß,
mikele

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von mikele » Mo 12. Jan 2015, 22:14

Hallo,

ich vergaß ja noch den Word-Export.
Dateianhänge
test_speichern.odt
(9.93 KiB) 218-mal heruntergeladen
Gruß,
mikele

Mau
* LO-Experte *
Beiträge: 460
Registriert: Do 14. Feb 2013, 19:37

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von Mau » Di 13. Jan 2015, 17:46

Liebe(r) Mikele,

hier nochmal mit Anhang:

ich habe mir den Makro abgeschrieben und versuche gerade zu verstehen, was in den einzelnen Zeilen passiert.

Zwei Fragen dazu:
  1. Wo bekommt man im Internet eine genaue Erklärung der Aufgabe und Syntax der verschiedenen von dir verwendeten Befehle/Funktionen? In einem Beitrag zu diesem Thema gab lessger den Link http://www.dannenhoefer.de/faqstarbasic ... tools.html an; der hat aber den Mangel, dass er keine Suchfunktion hat, und die Untertitel geben nicht genügend deutliche Hinweise, was man wo findet. Außerdem werden Syntax und Argumente nicht genau genug erläutert. Worauf stützt du dich bei der Programmierung?
  2. Die automatisch erzeugten Makros fangen alle anders an als deine (im Anhang findest du die Programmzeilen meines [automatisch erzeugten] Ausgangsmakros). Ich möchte darauf aufbauen und entsprechend deiner Programmierung umarbeiten. (Es sei denn, du kannst mir erklären, warum die nicht braucht.)
    Es geht dabei um die Zeilen in meinem Ausgangsmakro unterhalb der ersten beiden rem-Zeilen. Ab der dritten rem-Zeile läuft ja mit entsprechenden Abänderungen das gleiche ab wie im Ausgangsmakro.
Ansonsten ganz herzlichen Dank!

Gruß,
Mau
Dateianhänge
ODT-Makro Formate speichern.odt
(32.95 KiB) 180-mal heruntergeladen
Betriebssystem: Windows 10 (x64)

LO-Version: 6.2.8.2 (x64)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von lessger » Di 13. Jan 2015, 19:55

Hallo Mau,
Wo bekommt man im Internet eine genaue Erklärung der Aufgabe und Syntax der verschiedenen von dir verwendeten Befehle/Funktionen? In einem Beitrag zu diesem Thema gab lessger den Link http://www.dannenhoefer.de/faqstarbasic ... tools.html an; der hat aber den Mangel, dass er keine Suchfunktion hat, und die Untertitel geben nicht genügend deutliche Hinweise, was man wo findet. Außerdem werden Syntax und Argumente nicht genau genug erläutert.
ich fürchte, "das" Lehrbuch zu Starbasic und LO Programmierung wirst Du nicht finden. Ich selbst fand den Dannenhöfer als Starthilfe schon sehr nützlich, und suchen kannst Du per Google auch bei ihm.

Grundsätzlich ist es halt eine Frage, wieviel Du schon kannst. Brauchst Du erst eine Einführung in das spezielle Basic? Eine knappe Einführung in Starbasic gibt es z.B. hier: https://wiki.openoffice.org/wiki/DE/Mak ... c_Tutorial oder (schon etwas bejahrt, aber immer noch gut als Einführung) http://toolittle.org/downloads/StarOffi ... torial.pdf.

Als nächsten Schritt mußt Du das LO API lernen. Dazu solltest Du zumindest ein Grundverständnis von objekt-orientierter Programmierung haben. Du solltest Dir auch klar darüber sein, daß das API seeeeehr umfangreich und mächtig ist und es da einiges zu Lernen gibt. Nichts für mal schnell und nebenbei. Am besten geht es wirklich mit Beispielen und Ausprobieren. Auch der Makrorekorder, den Du für Deine Makros benutzt hast, ist keine dumme Idee. Wie aller generierter Code, ist er halt oft ein bißchen umständlich, aber immerhin findet man raus wie etwas geht - oft schneller als per API Doku.
Die automatisch erzeugten Makros fangen alle anders an als deine (im Anhang findest du die Programmzeilen meines [automatisch erzeugten] Ausgangsmakros). Ich möchte darauf aufbauen und entsprechend deiner Programmierung umarbeiten. (Es sei denn, du kannst mir erklären, warum die nicht braucht.)
Es geht dabei um die Zeilen in meinem Ausgangsmakro unterhalb der ersten beiden rem-Zeilen. Ab der dritten rem-Zeile läuft ja mit entsprechenden Abänderungen das gleiche ab wie im Ausgangsmakro.
Ja, da sind wir schon mittendrin in den Kozepten des API. Der Makrorekorder-Code nutzt einen Dispatcher, dem ein Befehl mitgegeben wird, und der Dispatcher ruft dann wieder eine Routine auf, um den Befehl auszuführen. Die Zeile

Code: Alles auswählen

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
erzeugt diesen Dispatcher, der etwas weiter unten dann benutzt wird.

Mikele nutzt das LO API direkt zum Speichern eines Dokuments, ohne den Umweg über den Dispatcher. Er braucht nur einen Verweis auf das aktive Dokument, und das macht er über

Code: Alles auswählen

oDoc = ThisComponent
Mikele macht genau das Gleiche wie Dein Makro, nur einfacher. Er hätte genauso gut allerdings auch Deine aufgezeichneten Makros abändern können.

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Mau
* LO-Experte *
Beiträge: 460
Registriert: Do 14. Feb 2013, 19:37

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von Mau » Mi 14. Jan 2015, 22:09

Lieber Gerhard,
danke für die ausführlichen Hinweise.
lessger hat geschrieben:
Mau hat geschrieben:Wo bekommt man im Internet eine genaue Erklärung der Aufgabe und Syntax der verschiedenen von dir verwendeten Befehle/Funktionen? In einem Beitrag zu diesem Thema gab lessger den Link http://www.dannenhoefer.de/faqstarbasic ... tools.html an; der hat aber den Mangel, dass er keine Suchfunktion hat, und die Untertitel geben nicht genügend deutliche Hinweise, was man wo findet. Außerdem werden Syntax und Argumente nicht genau genug erläutert.
ich fürchte, "das" Lehrbuch zu Starbasic und LO Programmierung wirst Du nicht finden. Ich selbst fand den Dannenhöfer als Starthilfe schon sehr nützlich, und suchen kannst Du per Google auch bei ihm.
Na, dann werd ich da mal ein bisschen gründlicher herumstöbern.
lessger hat geschrieben:Grundsätzlich ist es halt eine Frage, wieviel Du schon kannst. Brauchst Du erst eine Einführung in das spezielle Basic? Eine knappe Einführung in Starbasic gibt es z.B. hier: https://wiki.openoffice.org/wiki/DE/Mak ... c_Tutorial oder (schon etwas bejahrt, aber immer noch gut als Einführung) http://toolittle.org/downloads/StarOffi ... torial.pdf.
Nein und ja. Als man die WordPerfect-Makros noch unter DOS programmieren konnte, habe ich sehr umfangreiche Makros geschrieben, von denen zwei sogar in Computer-Zeitschriften abgedruckt wurden und einer in abgewandelter Form später sogar in den Programmcode von WP integriert wurde. Aber das heutige BASIC ist in der Tat derart mächtig und methodisch so anders, dass ich schon "abgeschnallt" habe, als WP seine Makrosprache auf VBA-Basic umstellte, und zwar auf genau die objektorientierte Programmierung, von der du auch sprichst.
lessger hat geschrieben:Als nächsten Schritt mußt Du das LO API lernen. Dazu solltest Du zumindest ein Grundverständnis von objekt-orientierter Programmierung haben. Du solltest Dir auch klar darüber sein, daß das API seeeeehr umfangreich und mächtig ist und es da einiges zu Lernen gibt. Nichts für mal schnell und nebenbei.
Ist mir klar. Und die Zeit habe ich leider nicht.
lessger hat geschrieben:
Das Ding sieht gut aus.
lessger hat geschrieben:[*]Eine systematische Dokumentation des API findest Du hier http://api.libreoffice.org/ oder http://www.openoffice.org/api/. Aber das wird Dir erst helfen, wenn Du schon recht gut weißt was Du tust.
[*]Ein Tool, mit dem Du Dir die Objekte zur Laufzeit ansehen kannst, ist ebenfalls unersetzlich. Dazu gibt es die Extension MRI. [/list]
Nee, das ist ein Universum für sich.
lessger hat geschrieben:Am besten geht es wirklich mit Beispielen und Ausprobieren. Auch der Makrorekorder, den Du für Deine Makros benutzt hast, ist keine dumme Idee. Wie aller generierter Code, ist er halt oft ein bißchen umständlich, aber immerhin findet man raus wie etwas geht - oft schneller als per API Doku.
Richtig, genau so möchte ich auch vorgehen. So bin ich auch schon vorgegangen beim Belegen verschiedener Tasten mit diversen Makros, die verschiedene Sonderzeichen (Türkisch) erzeugen. Da musste ich den Code so umarbeiten, dass der Makro nicht mit dem Zeichen zusammen auch das Schriftformat bestimmte; das habe ich auch hingekriegt. :D
lessger hat geschrieben:Mikele nutzt das LO API direkt zum Speichern eines Dokuments, ohne den Umweg über den Dispatcher. Er braucht nur einen Verweis auf das aktive Dokument, und das macht er über

Code: Alles auswählen

oDoc = ThisComponent
Mikele macht genau das Gleiche wie Dein Makro, nur einfacher. Er hätte genauso gut allerdings auch Deine aufgezeichneten Makros abändern können.
Ja, das wäre zur Vergleichbarkeit mit den bestehenden Makros besser gewesen. (Klingt etwas undankbar, ist aber nicht so gemeint.)

Gruß,
Mau
Betriebssystem: Windows 10 (x64)

LO-Version: 6.2.8.2 (x64)

lessger
Beiträge: 249
Registriert: Fr 4. Mai 2012, 13:33

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von lessger » Do 15. Jan 2015, 18:17

Hallo Mau,

Deine Punkte kann ich gut nachvollziehen. Nur das MRI Tool will ich Dir nochmal warm ans Herz legen. Sobald Du mit dem LO API arbeitest, ist das einfach unersetzlich. Viele Methoden und Eigenschaften des API sind weitgehend selbsterklärend, so ist MRI auch Dokumentationsersatz. Und für Debugging ist es sowieso wundervoll.

Grüße
Gerhard
LibreOffice 5.4.6.2 / Windows 10 64Bit / WIndows 10 32Bit

Mau
* LO-Experte *
Beiträge: 460
Registriert: Do 14. Feb 2013, 19:37

Re: Makro: Datei unter mehreren Formaten abspeichern

Beitrag von Mau » So 18. Jan 2015, 21:34

Lieber Gerhard,
lessger hat geschrieben:Nur das MRI-Tool will ich Dir nochmal warm ans Herz legen. Sobald Du mit dem LO API arbeitest, ist das einfach unersetzlich. Viele Methoden und Eigenschaften des API sind weitgehend selbsterklärend, so ist MRI auch Dokumentationsersatz. Und für Debugging ist es sowieso wundervoll.
Ich habe mir die Dateien heruntergeladen, habe aber im Moment keine Zeit, mich damit zu befassen.

Ich habe jetzt mal mikeles Skript in meinen Makro eingearbeitet (s. Anhang). Ich möchte ihn aber erst testen, wenn du und mikele ihn sich noch einmal angesehen habt. Vor allem habe ich das Gefühl, dass bei mir entweder die Zeile 29 überflüssig ist oder, weil bei mir der Dispatcher eingesetzt ist, die Zeilen 25 und 28 umgearbeitet werden müssen.

Gruß,
Mau
Dateianhänge
ODT-Makro Formate speichern 2.odt
(33.74 KiB) 190-mal heruntergeladen
Betriebssystem: Windows 10 (x64)

LO-Version: 6.2.8.2 (x64)


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