Gelöst:Writer-Datei mit Namen aus Seriendruck-Feld speichern

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: Gelöst:Writer-Datei mit Namen aus Seriendruck-Feld speichern

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von Rupp » Mo, 05.04.2010 14:12

Hallo Jürgen,

so - jetzt hat es wunderbar geklappt. Ich habe für den Dateinamen noch 2 weitere Felder hinzugefügt und gleichzeitiges Speichern unter dem aus den Feldern generierten Namen sowohl als Writer- als auch als PDF-Datei. Hier ist nun der komplette Code. Vielleicht nützt er so ja auch noch jemand anderem:

Code: Alles auswählen

sub Speichern_odt_und_pdf

Dim sEingabe, sNachname, sURL as String
Dim oFeld, oDoc, oTxtFelder as Object

   oDoc = thiscomponent

   'Felder auslesen      
   oTxtFelder = oDoc.getTextFields().createEnumeration()
   do while oTxtFelder.hasmoreElements()
   oFeld = oTxtFelder.nextElement
   if ofeld.supportsService("com.sun.star.text.textfield.Input")then
   if ofeld.Hint = ("Rechnungs-Nummer") then
   sEingabe = oFeld.Content
   end if
   end if
   if ofeld.supportsService("com.sun.star.text.TextField.Database")then
   if ofeld.Textfieldmaster.DataColumnName = "Firma" then
   sFirma = oFeld.Content
   end if
   end if
   if ofeld.supportsService("com.sun.star.text.TextField.Database")then
   if ofeld.Textfieldmaster.DataColumnName = "Nachname" then
   sNachname = oFeld.Content
   end if
   end if 
   if ofeld.supportsService("com.sun.star.text.TextField.Database")then
   if ofeld.Textfieldmaster.DataColumnName = "Vorname" then
   sVorname = oFeld.Content
   end if
   end if  
   loop
   weiter:
   
   'URL-String für das Speichern der Writer-Datei generieren
   sURL = "file:///c:/temp/" & sEingabe & "_" & sFirma & "_" & sNachname & "_" & sVorname & ".odt"
       
   'Speicherbefehl Writer-Datei
   ThisComponent.storeAsURL( sURL, Array() )

   'Messagebox aufrufen
   msgbox    sURL
   
   'URL-String für das Speichern der PDF-Datei generieren
   sPDF = "file:///c:/temp/" & sEingabe & "_" & sFirma & "_" & sNachname & "_" & sVorname & ".pdf"

   'Speicherbefehl PDF-Datei
   Dim pdfProperties(1) as new com.sun.star.beans.PropertyValue 
   pdfProperties(0).Name = "FilterName" 
   pdfProperties(0).Value = "writer_pdf_Export" 
   ThisComponent.storeToURL( sPDF, pdfProperties() )

   'Messagebox aufrufen	
   msgbox    sPDF
	
End Sub
Auch füge ich die Datei mit dem Code als Beispiel an. Der Code funktioniert perfekt unter der Voraussetzung, dass in den Serien-Feldern auch eingefügter Inhalt aus einer Datenbank existiert.

Noch einem ganz herzlichem Dank und noch einen schönen weiteren Ostemontag

Rupp
Dateianhänge
rupp_mit_code.odt
Datei mit Code
(19.19 KiB) 266-mal heruntergeladen

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von turtle47 » Mo, 05.04.2010 12:11

Hallo Rupp,

neuer Versuch:

Code: Alles auswählen

sub Textfeldbearbeiten_V2
Dim sEingabe, sNachname, sURL as String
Dim oFeld, oDoc, oTxtFelder as Object
	oDoc = thiscomponent
	oTxtFelder = oDoc.getTextFields().createEnumeration()
	do while oTxtFelder.hasmoreElements()
	oFeld = oTxtFelder.nextElement
	if ofeld.supportsService("com.sun.star.text.textfield.Input")then
	if ofeld.Hint = ("Rechnungs-Nummer") then
	sEingabe = oFeld.Content
	end if
	end if
	if ofeld.supportsService("com.sun.star.text.TextField.Database")then
	if ofeld.Textfieldmaster.DataColumnName = "Nachname" then
	sNachname = oFeld.Content
	end if
	end if	
	loop
	weiter:
   '################    Jetzt den String für das Speichern generieren #############
	sURL = "file:///C:/Dein Pfad/" & sEingabe & "_" & sNachname & ".odt"
	msgbox    sURL
End Sub
Erneuten Erfolg.

Jürgen

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von Rupp » Mo, 05.04.2010 11:11

Hallo Jürgen,

hier noch als Nachtrag die dazugehörige Datenbankdatei. Vielleicht geht so ja das Austesten leichter.

Danke :-)

Rupp
Dateianhänge
Adressen.odb
Hier noch die dazugehörige Datenbank
(6.49 KiB) 146-mal heruntergeladen

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von Rupp » Mo, 05.04.2010 10:26

Guten Morgen Jürgen,

dann lade ich mal meine Datei hoch. Ich habe sie auf das wesentliche reduziert.
Herzlichen Dank für Dein Angebot :-)

Binn gespannt, ob Du eine Möglichkeit findest.

Schöne Grüße

Rupp
Dateianhänge
rupp.odt
Beispieldatei mit den Seriendruckfeldern
(18.62 KiB) 155-mal heruntergeladen

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von turtle47 » Mo, 05.04.2010 06:34

Hi Rupp,
Rupp hat geschrieben:Bei dieser Zeile bleibt das Makro stehen:
sField = ofeld.getTextFieldMaster.DataColumnName
Es gibt jetzt zwei Möglichkeiten. Entweder Du untersuchst die Objekte selber mit den Tools "MRI" oder "xray" (einfach mal nach den Begriffen hier im Forum suchen), oder Du ladest hier ein Beispieldokument mit den beiden Feldbefehlen hoch.

Alles Andere ist raterei, weil die Feldbefehle zu vielfältig sind.

Jürgen

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von Rupp » Mo, 05.04.2010 02:02

Hallo Jürgen,

das ging aber schnell - Dankeschön :-)

Ich habe Deinen Code eingegeben und angepasst. Bei dieser Zeile bleibt das Makro stehen:
sField = ofeld.getTextFieldMaster.DataColumnName
(also eine Zeile vor: if sField = "Adressen.Adressliste_Klienten.Nachname" then)

Die Fehlermeldung lautet:
Basis Laufzeitfehler: Eigenschaft oder Methode nicht gefunen. DataColumnName.
Hast Du ncoh eine Idee, was da schief läuft?

Gruß

Rupp

Re: Writer-Datei mit Namen aus Seriendruck-Feld speichern

von turtle47 » Mo, 05.04.2010 01:25

Hallo Rupp,
Rupp hat geschrieben:Welchen Namen das Eingabefeld hat, kann ich nicht sagen (wenn ich die Feldnamen einblende, erscheint nur Eingabe-Feld).
Du hast dem Eingabefeld beim Erstellen doch bestimmt einen Hinweis mitgegeben. Oder?
Sonst mal einen Rechtsklick darauf machen und im Kontextmenue "Feldbefehl..." auswählen.
Dort den Hinweis eintragen. Dieser Name muss dann auch im Makro verwendet werden.

Versuche mal folgenden Code:

Code: Alles auswählen

sub Seriendruck_auslesen2
Dim sEingabe, sNachname, sURL, sField  as String
Dim oFeld, oDoc, oTxtFelder as Object
	oDoc = thiscomponent
	oTxtFelder = oDoc.getTextFields().createEnumeration()
	on Error goto weiter	
	do while oTxtFelder.hasmoreElements()	
	oFeld = oTxtFelder.nextElement
	if oFeld.SupportedServiceNames(0) = "com.sun.star.text.TextField.Input"_
	and oFeld.hint = "Rechnungsnummer" Then 'Beschreibung (Hinweis)des Eingabefeldes anpassen!
	sEingabe = oFeld.Content
	end if	
	loop
	Weiter:
	do while oTxtFelder.hasmoreElements()
	oFeld = oTxtFelder.nextElement
	sField = ofeld.getTextFieldMaster.DataColumnName
	if sField = "Nachname" then 'Namen des Serienfeldes anpassen
	sNachname = oFeld.Content
	end if
	loop
	'################    Jetzt den String für das Speichern generieren #############
	sURL = ConvertToURL("C:/USER/" & sEingabe & "_" & sNachname & ".odt"
	msgbox 	sURL
End Sub
Auf die Schnelle ist mir nichts anderes eingefallen.

Viel Erfolg.

Jürgen

Gelöst:Writer-Datei mit Namen aus Seriendruck-Feld speichern

von Rupp » So, 04.04.2010 23:45

Guten Abend und frohe Ostern :-)
ich möchte ein Makro für Writer erstellen, das die aktuelle Datei (eine Rechnung) automatisch unter einem speziellen Dateinamen speichert.

Dieser Dateiname soll sich aus zwei Teilen zusammensetzen:
a) aus einer Nr., die zuvor manuell in einem EINGABEFELD eingetragen wurde (das ist die Rechnungsnummer) und
b)dem Nachnamen des Rechnungsempfängers , der aus dem entsprechenden SERIENDRUCKFELD, das mit einer Datenbank verbunden ist, entnommen werden soll.

Ich möchte geren "ThisComponent.storeAsURL( adresse, Array() )" verwenden, mit dem ich in Calc ähnliches erfolgreich realisieren konnte. Jetzt weiß ich aber nicht, wie ich die URL erzeugen kann. Wie ich also das Eingabefeld und das Sereindruckfeld richtig ansprechen und dann zu einer URL zusammensetzen kann. Alle meine bisherigen Versuche blieben erfolglos.

So bitte ich also um Hilfe. Da ich Programmiernafänger bin, bräuchte ich am besten ein Codebeispiel. Das Seriendruckfeld, dessen Inhalt ich nutzen möchte, heißt [Adressen.Adressliste_Klienten.Nachname]. Welchen Namen das Eingabefeld hat, kann ich nicht sagen (wenn ich die Feldnamen einblende, erscheint nur Eingabe-Feld).

Herzlichen Dank

Rupp

Nach oben