Seite 1 von 1

ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Mo 30. Mär 2020, 12:34
von HeiDieLX2
Hallo Leute,

eine für mich im Moment schwierige Aufgabenstellung.

Es geht um die Bearbeitung von Writer Dokumenten aus Base heraus.
Texte in Felder schreiben, Tabellen mit anderen Texten, Zahlen etc. belegen funktioniert bereits und ist auch verstanden.

Wo es noch gewaltig klemmt ist hier:
Ein acht-seitiges Dokument aus welchem ich je nach Situation alle 8 Seiten, oder nur 1,2,5-8, oder 1,3,4,6-8 benötige.
Wie kann ich das geschickt machen.
Der Makrogenerator in Writer hilft mir da auch nicht wirklich.
Die Lektüre von "BASIC-Makros für OpenOffice und LibreOffice" von Andrew Pitonyak bringt mich auch nicht recht weiter, mir fehlt schlicht das Verständnis.
Habe dieses auch bereits im Bereich Writer geschildert, ist jedoch anscheinend etwas was dort nicht so vorkommt.

Letztlich ist es ein Projekt welches aus Base Angebote erstellen soll. Für jede denkbare Ang-Varinate ein eigenes OTT zu erstellen ist auch nicht zielführend weil es einfach zu viele werden.

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Mo 30. Mär 2020, 12:59
von Pit Zyclade
Man kann doch aus Base genauso wie aus anderen Teilen wie calc heraus eine Writerdatei öffnen!
Solange man das per Hand machen will, gibt es keine Probleme.

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Mo 30. Mär 2020, 16:51
von RobertG
Hallo HeiDieLx,

hast Du Dir im Handbuch den Abschnitt zum Drucken aus Base heraus angesehen? Steht in dem Makro-Kapitel. Du kannst das Writerdokument doch einfach laden und dann über die Printer-Option "Pages" die entsprechenden Seiten auswählen. Müsste ähnlich funktionieren wie dort der Druck eines Berichtes. Der Link zur LibreOffice API ist dort auch enthalten.

Gruß

Robert

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Mo 30. Mär 2020, 18:17
von F3K Total
Moin HeiDieLx,
ich habe deine Idee so verstanden:
Du möchtest, je nachdem welche Seiten in Base ausgewählt wurden, das passende Angebot als Serienbrief drucken. Geht!
Mit Bereichen. Die lassen sich nämlich mit einer DATENBANK-Bedingung ausblenden.
Ich schicke anbei eine Base-Datei mit einer einfachen Tabelle, in der die gewünschten Seiten per Markierfeld ausgewählt werden können.
Base_Tabelle.png
Base_Tabelle.png (21.11 KiB) 6222 mal betrachtet
Wenn du die Datenbank unter Extras/Optionen/LibreofficeBase/Datenbanken registriert hast wird das Writerdokument, dass acht Bereiche (Seiten) enthält, beim Seriendruck jeweils nur die in Base angehakten Bereiche (Seiten) ausdrucken.
Also
Angebot 1 Seiten 1,2,5-8
Angebot 2 Seiten 1-6
Angebot 3 Seiten 1,2,5,6,8
Habe ich als .PDF-Ausdruck mit angehängt.
Natürlich kann man über Filter auch nur das gerade in Bearbeitung befindliche Angebot einzeln drucken.
Gruß R

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Di 31. Mär 2020, 18:27
von HeiDieLX2
Hallo und danke für die Antworten.

Ich bin inzwischen auch nicht untätig gewesen...
In dem Writerdokument habe ich mal Makroaufzeichnung eingeschaltet um zu sehen was LO da so an Code produziert.

Im meiner Situation kommt dann so was zustande:

Code: Alles auswählen

	' Angebot-Schablone öffnen und Daten rein
	' FileProp(0).Name = "Hidden"   '-- "AsThemplate"
	FileProp(0).Name = "AsThemplate" '-- "Hidden"
	FileProp(0).Value = true
	oHDoc = StarDesktop.loadComponentFromURL(csQuellPfad & "/" & aPfadDatei(2),"_blank", 0, FileProp() )
	oDoc  = oHDoc.CurrentController.Frame
	oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	rem ----------------------------------------------------------------------
	IF aAktValues(HZKJaNein) = "nein" AND aAktValues(FBHJaNein) = "Fussboden" THEN
		' wenn keine Heizkörper dann 
		FOR niX = 1 To 2
			args1(0).Name = "Count"
			args1(0).Value = IIF(niX=1,27,34)
			oDispatcher.executeDispatch(oDoc, ".uno:GoDown", "", 3, args1())
			rem ----------------------------------------------------------------------
			args2(0).Name = "Count"
			args2(0).Value = IIF (niX=1,4,5)
			args2(1).Name = "Select"
			args2(1).Value = true
			oDispatcher.executeDispatch(oDoc, ".uno:GoDown", "", 3, args2())
			oDispatcher.executeDispatch(oDoc, ".uno:Delete", "", 0, Array())
		NEXT
	END IF	
	IF aAktValues(HZKJaNein) = "Heizkoerper" AND aAktValues(FBHJaNein) = "nein" THEN
		' wenn kein Fussboden dann
		args1(0).Name = "Count"
		args1(0).Value = 45
		oDispatcher.executeDispatch(oDoc, ".uno:GoDown", "", 3, args1())
		rem ----------------------------------------------------------------------
		args2(0).Name = "Count"
		args2(0).Value = 8				' 8 löscht zwei Seiten
		args2(1).Name = "Select"
		args2(1).Value = true
		oDispatcher.executeDispatch(oDoc, ".uno:GoDown", "", 3, args2())
		oDispatcher.executeDispatch(oDoc, ".uno:Delete", "", 0, Array())
	END IF
	rem --------------------------------------------------------------------------
	rem grundsätzliche Ang-Dok Anpassung fertig nun kommen die Inhalte
Erst mal Datei (Schablone) öffnen

Code: Alles auswählen

args1(0).Value = IIF(niX=1,27,34)
			oDispatcher.executeDispatch(oDoc, ".uno:GoDown", "", 3, args1())
das sind die Pfleil runter 27 oder 34 mal. Danach kommt 8 mal runter mit gedrückter Shift-Taste, danach der Delete und weg ist die Seite.
Funktioniert richtig gut.
Nachteil: Wenn sich was am Dok. ändert z. B. weitere Zeile in der Tabelle muss der Code bei Anzahl GoDown und/oder bei Shift-GoDown angepasst werden.
Ich benutze diese Möglichkeit nun, verstanden habe ich das jedoch noch nicht, bzw. welche weiteren Möglichkeiten sich damit eröffnen.

@F3K Total: Wenn ich nicht o. s. Lösung hätte wäre dein Vorschlag erste Wahl. Hier ist nur das Problem des Benutzers und der Seitennummerierung. Ohne dein Zip getestet zu haben... ;-)
Mache ich jetzt.

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Di 31. Mär 2020, 18:50
von HeiDieLX2
Hallo F3K Total,

ich weiß nicht...

Code: Alles auswählen

DATENBANK_ANGEBOTSERSTELLUNG.odb.lck
nur 16 Byte! :?:

Was mache ich da falsch?

Re: ODT/OTT Datei aus Base verändern, bearbeiten

Verfasst: Di 31. Mär 2020, 19:14
von F3K Total
ups, verzipped...sollte eigentlich die ,odb sein...
Gruß R