🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> 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 in Writer
Makro in Writer
Hallo liebe Makro-Spezialisten,
an folgenden Problem knappere ich d. Zt.
Es sollen Verträge abgespeichert werden, die als Dateinamen den Namen des Vertragnehmers tragen. Am besten wäre, dass noch im Namen auch das Datum enthalten wäre. Der Name des Vertragespartners wird per <Strg+c> übernommen und bei <Speichern unter> mit <Strg+V> eingefügt.
Das vorhandene Makro wurde schon mit dem Makrorekorder aufgezeichnet. Dabei wird natürlich der Name eines Vertragspartners fest in das Makro eingefügt, so dass bei einem Vertrag mit einem weiteren Vertragspartners der Name aus dem ersten Vertrag erscheint. Genau da liegt mein Problem. Wie sage ich es dem Makro, dass hier der Name des soeben kopierten Vertragspartners einzufügen wäre.
Hier der Bereich wo es happert.
rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "URL"
--->args5(0).Value = "file:///H:/Pfl%C3%BCger_Lager/Lagerverwaltung/Vertrag%20(O)/AA_Leer.odt"
args5(1).Name = "FilterName"
args5(1).Value = "writer8"
Ich bitte um Hilfe
gvk
an folgenden Problem knappere ich d. Zt.
Es sollen Verträge abgespeichert werden, die als Dateinamen den Namen des Vertragnehmers tragen. Am besten wäre, dass noch im Namen auch das Datum enthalten wäre. Der Name des Vertragespartners wird per <Strg+c> übernommen und bei <Speichern unter> mit <Strg+V> eingefügt.
Das vorhandene Makro wurde schon mit dem Makrorekorder aufgezeichnet. Dabei wird natürlich der Name eines Vertragspartners fest in das Makro eingefügt, so dass bei einem Vertrag mit einem weiteren Vertragspartners der Name aus dem ersten Vertrag erscheint. Genau da liegt mein Problem. Wie sage ich es dem Makro, dass hier der Name des soeben kopierten Vertragspartners einzufügen wäre.
Hier der Bereich wo es happert.
rem ----------------------------------------------------------------------
dim args5(1) as new com.sun.star.beans.PropertyValue
args5(0).Name = "URL"
--->args5(0).Value = "file:///H:/Pfl%C3%BCger_Lager/Lagerverwaltung/Vertrag%20(O)/AA_Leer.odt"
args5(1).Name = "FilterName"
args5(1).Value = "writer8"
Ich bitte um Hilfe
gvk
-
- Beiträge: 10
- Registriert: Fr 18. Dez 2015, 13:01
- Kontaktdaten:
Re: Makro in Writer
Hallo gvk,
ich beziehe mich auf diesen Thread: http://www.libreoffice-forum.de/viewtop ... =5&t=15724
Den vorherigen Codeschnipsel müsstest Du in ein eigenes Makro einbinden. Deine Frage war, wie Datum und Vertragspartner in den Dokumentennamen gelangen können. Dazu habe ich ein Beispiel gepostet.
Um Dein Problem besser zu analysieren, wäre es hilfreich, wenn Du mehr Informationen anbietest und genauer beschreibst wie der Ablauf ist. Z. B. Wann, wo und mit welchem Ereignis soll das passieren?
viele Grüße
Makromador
ich beziehe mich auf diesen Thread: http://www.libreoffice-forum.de/viewtop ... =5&t=15724
Den vorherigen Codeschnipsel müsstest Du in ein eigenes Makro einbinden. Deine Frage war, wie Datum und Vertragspartner in den Dokumentennamen gelangen können. Dazu habe ich ein Beispiel gepostet.
Um Dein Problem besser zu analysieren, wäre es hilfreich, wenn Du mehr Informationen anbietest und genauer beschreibst wie der Ablauf ist. Z. B. Wann, wo und mit welchem Ereignis soll das passieren?
viele Grüße
Makromador
Re: Makro in Writer
Hallo Makromador,
gern beschreibe ich Dir meine Gedanken und vorgehensweise.
Der Vertrag ist mit Datenfeldern vorbereitet, die Vertragsbeginn und Vertragsende sowie Name und Adresse des Vertragspartners enthalten. Außerdem ist ein Datenfeld mit Namen und Adresse in der Kopfzeile untergebracht. Die Datenfelder werden aus einer über F4 aufzurufenden Datenbank gefüllt. Und hier beginnt das Makro.
Schritt 1 -schließen der Datenbank mit F4
Schritt 2 -Coursor steht am Beginn der Kopfzeile
Schritt 3 -mit <Shift - ENDE> markieren des Kopfzeileninhaltes
Schritt 4 -mit <Strg C> kopieren des Kopfzeileninhalt
Schritt 5 -aufrufen von <Speichern unter>
Schritt 6 -Einfügen des Copy-Inhalts mit <Strg V> in die Zeile für den Dateinamen
Schritt 7 -Umstellen des Dateityps von *.ott auf *.odt
Schritt 7 -Speichern
Bei Schritt 6 kommt dann mein Problem ins Spiel. Wie ich schon beschrieben habe, wird ja der Name, der bei der Makroaufname mit Strg V eingefügt wurde in das Makro integriert und wird immer wieder verwendet. Obwohl im Kopfzeileninhalt schon ein anderer Name steht. Wenn man hier mit einer Variablen arbeiten könnte, wäre m.E. das Problem aus der Welt. Aber Du hast ja zum Makro Deine eigenen Vorstellungen.
Und da evt. ein weiterer Vertrag mit dem selben Namen zustande kommen könnte, möchte ich zur Unterscheidung auch das Datum integriert haben. Dies sollte aber nach dem Namen stehen.
So jetzt glaube ich, habe ich alle Klarheiten beseitigt und hoffe, dass Du mir helfen kannst.
Mfg
gvk
gern beschreibe ich Dir meine Gedanken und vorgehensweise.
Der Vertrag ist mit Datenfeldern vorbereitet, die Vertragsbeginn und Vertragsende sowie Name und Adresse des Vertragspartners enthalten. Außerdem ist ein Datenfeld mit Namen und Adresse in der Kopfzeile untergebracht. Die Datenfelder werden aus einer über F4 aufzurufenden Datenbank gefüllt. Und hier beginnt das Makro.
Schritt 1 -schließen der Datenbank mit F4
Schritt 2 -Coursor steht am Beginn der Kopfzeile
Schritt 3 -mit <Shift - ENDE> markieren des Kopfzeileninhaltes
Schritt 4 -mit <Strg C> kopieren des Kopfzeileninhalt
Schritt 5 -aufrufen von <Speichern unter>
Schritt 6 -Einfügen des Copy-Inhalts mit <Strg V> in die Zeile für den Dateinamen
Schritt 7 -Umstellen des Dateityps von *.ott auf *.odt
Schritt 7 -Speichern
Bei Schritt 6 kommt dann mein Problem ins Spiel. Wie ich schon beschrieben habe, wird ja der Name, der bei der Makroaufname mit Strg V eingefügt wurde in das Makro integriert und wird immer wieder verwendet. Obwohl im Kopfzeileninhalt schon ein anderer Name steht. Wenn man hier mit einer Variablen arbeiten könnte, wäre m.E. das Problem aus der Welt. Aber Du hast ja zum Makro Deine eigenen Vorstellungen.
Und da evt. ein weiterer Vertrag mit dem selben Namen zustande kommen könnte, möchte ich zur Unterscheidung auch das Datum integriert haben. Dies sollte aber nach dem Namen stehen.
So jetzt glaube ich, habe ich alle Klarheiten beseitigt und hoffe, dass Du mir helfen kannst.
Mfg
gvk
Re: Makro in Writer
... und ich glaube, Deine Probleme liegen ganz woanders
- sorry, aber Deine Schritte sind etwas ungewöhnlich.
Wie wäre folgendes Vorgehen:
Du hast ja offensichtlich eine Datebank, in der die Verträge (oder zumindest die Kundendaten) als Datensätze gespeichert sind. So etwas kann man prima als Grundlage für ein Seriendruckdokument verwenden. Das Ding heißt zwar Serienbrief, aber es kann auch mal nur ein einzelner Brief gedruckt (oder als pdf abgespeichert) werden, das macht gar nix aus.
Also:
1. Mach Dir in der Datenbank eine Abfrage der Daten die im Vertrag stehen sollen, in der Du den zukünftigen Dateinamen als Datenfeld berechnest, und speichere sie z.B. als "Serienbriefabfrage". z.B. Wenn Du eine Tabelle mit Kundennamen hast:
Der etwas umständliche Ausdruck mit den Replaces macht nichts anderes, als dass er Doppelpunkte, Punkte und Leerzeichen aus dem Zeitstempel entfernt.
2. lege den Vertrag als odt-Datei an.
3. füge über das Menü Einfügen/Feldbefehl/Andere... unter dem Reiter "Datenbank" (linke Spalte) ein "Seriendruck-Feld" ein.
In der rechten Spalte kannst Du die Datenbank, die Abfrage (also "Serienbriefabfrage") und das Feld z.B. "Kundenname" auswählen und mit Klick auf "Einfügen" wird das Feld dann etwa so: <Kundenname> (grau hinterlegt) im Dokument eingefügt.
Das Dokument ist nun ein Serienbrief, wann immer Du auf Drucken gehst, wirst Du gefragt ob Du einen Serienbrief drucken willst - beantworte mit ja, und im folgenden Dialog kannst Du dann den/die Empfänger auswählen und den Brief wie gewünscht als pdf mit dem "berechneten" Dateinamen speichern: Natürlich kannst Du auch noch andere Felder dazunehmen (Anrede, Name, Adresse, ...) also ein normaler Adressblock.

Wie wäre folgendes Vorgehen:
Du hast ja offensichtlich eine Datebank, in der die Verträge (oder zumindest die Kundendaten) als Datensätze gespeichert sind. So etwas kann man prima als Grundlage für ein Seriendruckdokument verwenden. Das Ding heißt zwar Serienbrief, aber es kann auch mal nur ein einzelner Brief gedruckt (oder als pdf abgespeichert) werden, das macht gar nix aus.
Also:
1. Mach Dir in der Datenbank eine Abfrage der Daten die im Vertrag stehen sollen, in der Du den zukünftigen Dateinamen als Datenfeld berechnest, und speichere sie z.B. als "Serienbriefabfrage". z.B. Wenn Du eine Tabelle mit Kundennamen hast:
Code: Alles auswählen
SELECT "Kundenname", "Kundenname" || '_' || left(replace(replace(replace(CURRENT_TIMESTAMP,':',''),'.','_'), ' ', '_'),17) as "Dateiname" FROM "Kunden"
2. lege den Vertrag als odt-Datei an.
3. füge über das Menü Einfügen/Feldbefehl/Andere... unter dem Reiter "Datenbank" (linke Spalte) ein "Seriendruck-Feld" ein.
In der rechten Spalte kannst Du die Datenbank, die Abfrage (also "Serienbriefabfrage") und das Feld z.B. "Kundenname" auswählen und mit Klick auf "Einfügen" wird das Feld dann etwa so: <Kundenname> (grau hinterlegt) im Dokument eingefügt.
Das Dokument ist nun ein Serienbrief, wann immer Du auf Drucken gehst, wirst Du gefragt ob Du einen Serienbrief drucken willst - beantworte mit ja, und im folgenden Dialog kannst Du dann den/die Empfänger auswählen und den Brief wie gewünscht als pdf mit dem "berechneten" Dateinamen speichern: Natürlich kannst Du auch noch andere Felder dazunehmen (Anrede, Name, Adresse, ...) also ein normaler Adressblock.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: Makro in Writer
Hallo Makromador,
vielen Dank für Deine superschnelle Antwort. Aber ganz offensichtlich muß ich ich noch weiter vorne mit der Erklärung meines Problems beginnen da ich sonst mit 3erlei Programmen hantieren muß.
Grundlage für meine Adressen, um die ja geht, ist ein Tabellenblatt das für die Organisation des ganzen Betriebes (auch der Übersicht wegen) so angelegt wurde. In diesem "Organisationsblatt" werden die in einem weiteren Tabellenblatt vorgetragenen Adressen (um die es geht) mittels Dropdownfeld übernommen.(=Tabelle 1)
Die von Hand eingetragenen Adressen liegen in einer als "Adressdatenbank" geführten weiteren Tabelle (2) eingetragen.
Und und kommt der "Knacktus Kaktus". Diese Adressen werden, zwecks Bereitstellung für eine (die bekannte Datenbankquelle = Adressdatenquelle) in einer separat angelegten Tabelle (Datei) mit einer Tabellenverknüpfung übernommen. Diese Datenbankquelle ist in Writer verbunden. (Adressdatenquelle > Andere externe Datenquelle > Tabellendokument > "Pfad zur separat angelegten Tabelle mit Adressen" - Datei = "Mieteradressen" verbunden. Der Inhalt wird dann in Writer unter F4 angezeigt bzw. übernommen.
MfG
gvk
vielen Dank für Deine superschnelle Antwort. Aber ganz offensichtlich muß ich ich noch weiter vorne mit der Erklärung meines Problems beginnen da ich sonst mit 3erlei Programmen hantieren muß.
Grundlage für meine Adressen, um die ja geht, ist ein Tabellenblatt das für die Organisation des ganzen Betriebes (auch der Übersicht wegen) so angelegt wurde. In diesem "Organisationsblatt" werden die in einem weiteren Tabellenblatt vorgetragenen Adressen (um die es geht) mittels Dropdownfeld übernommen.(=Tabelle 1)
Die von Hand eingetragenen Adressen liegen in einer als "Adressdatenbank" geführten weiteren Tabelle (2) eingetragen.
Und und kommt der "Knacktus Kaktus". Diese Adressen werden, zwecks Bereitstellung für eine (die bekannte Datenbankquelle = Adressdatenquelle) in einer separat angelegten Tabelle (Datei) mit einer Tabellenverknüpfung übernommen. Diese Datenbankquelle ist in Writer verbunden. (Adressdatenquelle > Andere externe Datenquelle > Tabellendokument > "Pfad zur separat angelegten Tabelle mit Adressen" - Datei = "Mieteradressen" verbunden. Der Inhalt wird dann in Writer unter F4 angezeigt bzw. übernommen.
MfG
gvk
Re: Makro in Writer
Hi,
kannst Du das Writerdokument, wichtig sind nur die Felder in die die Daten per F4 eingefügt werden, zur Verfügung stellen?
Denke, ich habe da eine hübsche Lösung auf Lager.
Gruß R
kannst Du das Writerdokument, wichtig sind nur die Felder in die die Daten per F4 eingefügt werden, zur Verfügung stellen?
Denke, ich habe da eine hübsche Lösung auf Lager.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Makro in Writer
Hallo, F3K Total;
im Anhang ist das Writer-Dok - "zur weiteren Verwendung".
Ich hätte Dir gerne die Dokumentvorlage (ott) geschickt, leider konnte ich diese nicht einfügen.
mfg
gvk
im Anhang ist das Writer-Dok - "zur weiteren Verwendung".
Ich hätte Dir gerne die Dokumentvorlage (ott) geschickt, leider konnte ich diese nicht einfügen.
mfg
gvk
Re: Makro in Writer
Hi,
versuche mal dieses Marko:
Gruß R
versuche mal dieses Marko:
Code: Alles auswählen
Sub S_Vertrag_Speichern
odoc = thisComponent
sFolderURL = "H:\Pflüger_Lager\Lagerverwaltung\Vertrag (O)\"
oTFEnum = thisComponent.TextFields.createenumeration
While oTFEnum.hasmoreelements
oTF = oTFEnum.nextelement
sDCName = oTF.Textfieldmaster.DataColumnName
if sDCName = "Mieter" then sName = replace(oTF.Content," ","_")
wend
sDate = Format(Date,"DDMMYYYY")
sFileName = "Vertrag_"+sName+"_"+sDate+".odt"
sUrl = converttourl(sFolderURL+sFileName)
odoc.storeToURL(sURL, Array())
msgbox (""""+sFileName+""""+chr(13)+"in Ordner """+sFolderURL+""" gespeichert;-)",64,"Speichern erfolgreich")
End Sub
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Makro in Writer
Hallo F3K Total,
danke für die Mühe, aber das Makro will so nicht.
Im Anhang ist ein Screenshot der Fehleranzeige.
Mfg
gvk
danke für die Mühe, aber das Makro will so nicht.
Im Anhang ist ein Screenshot der Fehleranzeige.
Mfg
gvk
- Dateianhänge
-
- Bilschirm001_.jpg (69.39 KiB) 7588 mal betrachtet
Re: Makro in Writer
Hi,
da müssen wir wohl zusätzlich noch abprüfen, ob das Textfeld ein Seriendruckfeld ist, versuche es mal hiermit:
Gruß R
da müssen wir wohl zusätzlich noch abprüfen, ob das Textfeld ein Seriendruckfeld ist, versuche es mal hiermit:
Code: Alles auswählen
Sub S_Vertrag_Speichern
odoc = thisComponent
sFolderURL = "H:\Pflüger_Lager\Lagerverwaltung\Vertrag (O)\"
oTFEnum = thisComponent.TextFields.createenumeration
While oTFEnum.hasmoreelements
oTF = oTFEnum.nextelement
if oTF.supportsservice("com.sun.star.text.TextField.Database") then
sDCName = oTF.Textfieldmaster.DataColumnName
if sDCName = "Mieter" then sName = replace(oTF.Content," ","_")
endif
wend
sDate = Format(Date,"DDMMYYYY")
sFileName = "Vertrag_"+sName+"_"+sDate+".odt"
sUrl = converttourl(sFolderURL+sFileName)
odoc.storeToURL(sURL, Array())
msgbox (""""+sFileName+""""+chr(13)+"in Ordner """+sFolderURL+""" gespeichert;-)",64,"Speichern erfolgreich")
End Sub
Windows 11: AOO, LO Linux Mint: AOO, LO
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.