🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

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

Speichern einzelner Folien (impress) mit bestimmtem Namen

Alles zur Programmierung im LibreOffice.
LeFagnard
Beiträge: 12
Registriert: Fr 10. Nov 2023, 12:16

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von LeFagnard » Sa 23. Dez 2023, 02:50

Hallo mikele,

das Einfügen des "else" führte zu ganz falschen Resultaten, also, weg damit. Schade ich hatte mir eine Vorteil für die Nutzer davon erhofft.

Die Transparenz funktioniert prächtig. Super.

Ich habe allerdings noch ein kleines Problem.
In der beigefügten Testdatei findest du einige Folie, in dene ich absichtlich -fehlerhafte Titel eingefügt habe:
  • Foilie 17, Titel = RB-L;
  • Folie 18, leeres Feld ohne Inhalt;
  • Folie 19, ohne Feld
Dass die beiden letzten nicht export werden leuchtet mir ein, aber warum die Folie 17 nicht?
Ich habe den Test auf

Code: Alles auswählen

	if left(oForm.String,3)="RB-" then
		sName=oForm.String
	end if
geändert. Da müsste sie doch bearbeitet werden.

Würdest du mir bitte noch einmal weiterhelfen?

Vielen Dank,
Marc
Dateianhänge
RB-Lg-01.odp
(635.59 KiB) 104-mal heruntergeladen

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von F3K Total » Sa 23. Dez 2023, 10:04

Guten Morgen,
wenn der Name der PNG Datei aus irgendeinem Textfeld auf der jeweiligen Folie ausgelesen wird, führt dies zwangsläufig zur Verwirrungen. Ich empfehle:
Mache dir einmal die Mühe, und benenne die jeweilige Folie mit dem jeweiligen Namen, dann wird das ganze sehr viel einfacher. Es wird nur eine Zeile benötigt um den Namen EINDEUTIG zuzuordnen:
RB.png
RB.png (102.44 KiB) 3171 mal betrachtet
RB2.png
RB2.png (43.15 KiB) 3171 mal betrachtet

Code: Alles auswählen

Sub Main

	'Zugriff auf das Dokument
	oDoc=ThisComponent
	'Exportfilter festlegen
	Dim args(2) As New com.sun.star.beans.PropertyValue
	oFilter = CreateUnoService("com.sun.star.drawing.GraphicExportFilter")
	args(1).Name = "MediaType"
	args(1).Value = "image/png"
	args(2).Name = "FilterData"
	Dim FilterData (1) As New com.sun.star.beans.PropertyValue
	myPixelWidth = 2835 : myPixelHeight = 2835 '  = 12cm:(2,54:96 cm pro Pixel)*600:96 
	FilterData(0).Name = "PixelWidth"  : FilterData(0).Value = myPixelWidth
	FilterData(1).Name = "PixelHeight" : FilterData(1).Value = myPixelHeight
	args(2).Value = FilterData

	'Durchlauf durch alle Folien
	For i = 0 To oDoc.getDrawPages().getCount() - 1
		oPage = oDoc.getDrawPages().getByIndex(i)
		'Foliennamen auslesen
		sName=i & "_" & oPage.Name
		'Zieldatei festlegen
		args(0).Name = "URL"
		args(0).Value = convertToUrl("/home/michael/test/" & sName & ".png")
		'Exportieren
		oFilter.setSourceDocument(oPage)
		oFilter.filter(args())
	Next
End Sub
Gruß R
Dateianhänge
RB-Lg-01.odp
nur noch Speicherpfad anpassen
(636.77 KiB) 96-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

LeFagnard
Beiträge: 12
Registriert: Fr 10. Nov 2023, 12:16

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von LeFagnard » Mi 27. Dez 2023, 14:09

Hallo Mikele,

danke für die Version mit Hilfe der Foliennamen. Das funkioniert natürlich einfacher.
Allerdings ist die EIngabe über den Navigator schwierig, denn copy/paste funktioniert nicht. Ich muss alles per Hand eingeben.
Da LibreOffice für mich Neuland ist, weiß ich nicht, ob es eine bessere Funktion gibt.

Nun, ich bin beim Verfeinern des Makros, um den Leuten die Möglichkeit zu geben, auch einzelne Folien als png zu speichern.
Hier mein Code:

Code: Alles auswählen

	'Abfragen, welche Bilder gespeichert werden sollen
	sText=inputbox("Quelle feuille enregistrer ?" + chr(13)  + "* laisser la réponse vide = tous" + chr(13) + "* nom ou partie de nom = une feuille", "Enregistrement *.png")
	
	'Durchlauf durch alle Folien
	For i = 0 To oDoc.getDrawPages().getCount() - 1
		oPage = oDoc.getDrawPages().getByIndex(i)
		'Foliennamen auslesen
		sName = oPage.Name
		'Auswahl der zu speichernden Folien
		[color=#0040FF]if stext = "" or sname like "*" & stext & "*" then[/color]
			'Zieldatei festlegen
			args(0).Name = "URL"
			aDatei=split(oDoc.Url,"/")
			aDatei(ubound(aDatei))="21 - " & sName & " - " & format(now(),"yyyy-MM-dd hh-mm-ss") & ".png"
			args(0).Value = convertToUrl(join(aDatei,"/"))
			'Exportieren
			oFilter.setSourceDocument(oPage)
			oFilter.filter(args())		
		end if
Zur Erklärung der Inputbox:
Keine Eingabe = Alles speichern
Name oder Teil des Namens: eine Folie

In Bezug auf die Inputbox finde ich Versionen mit "&" und mit "+" zwischen den diversen Bestandteilen. Wie ist es richtig?
Was den Test (If) betrifft, weiß ich nicht, ob er mit einem "like" bei Libre Office Basic so richtig ist. Im Netz habe ich diesbezüglich nichts gefunden.

Vielen Dank für Deine Hilfe,
Marc

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

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von mikele » Mi 27. Dez 2023, 18:36

Hallo,
der Dank gebührt F3K Total ...
Die Änderung des Foliennamens kannst du auch über ->Folie->Umbennen durchführen. Dem Befehl kannst du auch eine Schaltfläche verpassen oder eine Tastenkombination zuweisen (ode rein kleines Makro schreiben, dass den vorhandenen Namen aus dem Textfeld liest).
Für die Verkettung von Strings sind & bzw. + gleichwertig.
"Like" gibt es in Basic nicht. Du könntest anstelle die Funktion INSTR() nutzen.

Code: Alles auswählen

if stext = "" or INSTR(sname, stext)>0 then
Gruß,
mikele

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von F3K Total » Do 28. Dez 2023, 16:50

Hallo LeFagnard,
weil ich Lust und Zeit hatte, habe ich einen modalen Dialog geschrieben, der, so denke ich, alle deine Wünsche erfüllt.
Er passt sich der Anzahl der vorhandenen Folien an. Wird immer länger und breiter.
Export_PNG_DIALOG.png
Export_PNG_DIALOG.png (64.67 KiB) 2829 mal betrachtet
  • Der Dialog zeigt jeden Folienamen in einem Textfeld, in dem der Name der Folie per Copy/Paste geändert werden kann, an. Namen ändern und unten die Schaltfläche OK, rename pages anklicken, dann werden die Folien umbenannt.
  • Vor jedem Folienamen befindet sich eine Checkbox, jede angeklickte Folie wird beim Druck auf den Button
    OK, export selected als .png in den eingestellten Ordner exportiert. Sollen alle Folien auf einmal exportiert werden, oben den Button select all anklicken, zum abwählen, nochmal klicken.
Datei anbei.
Viel Erfolg
Gruß R
Dateianhänge
RB-Lg-01_F3K.odp
(638.23 KiB) 95-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

LeFagnard
Beiträge: 12
Registriert: Fr 10. Nov 2023, 12:16

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von LeFagnard » Fr 29. Dez 2023, 16:04

Hallo Mikele,

waow, herzlichen Dank für das tolle Neujahrsgeschenk. Großartig.
Ich wollte Dich gerade noch fragen, wie ich den Namen des aktiven Blattes auslesen kann, aber mit diesem Geschenk wird das überflüssig.
Ich hatte bereits einen Button auf der ersten Folie in der vorherigen Version erstellt.

Nach den Tagen werde ich mich einmal hineinknieen, um die Vorgehensweise zu verstehen.
Ich übersetze jetzt noch den Button und die Texte ins Französische, denn nicht alle Nutzer sind dem Englischen mächtig.

Nur mal, falls du Neugierig bist, wozu solch komische Zeichnungen dienen, ein Beispiel in der Anlage.
Ich bin einer der Kartografen bei der VoG Sentiers de Grande Randonnée (Fernwanderwege im französich- und deutschsprachigen Teil Belgiens) und auch Verantwortlicher der Arbeitsgruppe (35 Freiwillige), die sich um den Unterhalt der Markierungen der Fernwanderwege im deutschsprachigen Teil Belgiens (Ostbelgien) kümmert.
In der Anlage ist eine der Tageswanderungen beschrieben, die wir zusätzlich zu den Fernwanderwegen anbieten, hier vom Dach Belgiens ausgehend. Die Begriffe GR ... und GRP ... sind die Nummern der Fernwanderwege, die teilweise begangen werden, mit der Art der Markierung.
Unterlagen für Fern- und Tageswanderungen wird es demnächst auch in deutscher Sprache geben, ich kämpfe seit einem Jahr dafür.

Nochmals herzlichen Dank für das tolle Geschenk.

EInen Guten Rutsch und alles Gute für das neue Jahr.
Marc
Dateianhänge
RB-Lg-32 Botrange.pdf
(2.5 MiB) 72-mal heruntergeladen

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

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von mikele » Fr 29. Dez 2023, 17:42

Hallo,
das Geschenk (so toll wie es ist) ist nicht von mir.
Gesundes Neues Jahr!
Gruß,
mikele

LeFagnard
Beiträge: 12
Registriert: Fr 10. Nov 2023, 12:16

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von LeFagnard » Sa 30. Dez 2023, 02:33

Hallo Mikele,

beim Ersetzen des Zielordners durch die drei Zeilen zum Speichern im selben Ordner wie das ausführende Programm, erhalte ich jetzt einen Fehler:

Code: Alles auswählen

'Foliennamen auslesen
sName = i & "_" & oPage.Name
'Zieldatei festlegen
args(0).Name = "URL"

aDatei=split(oDoc.Url,"/")
aDatei(ubound(aDatei))=sName & ".png"
args(0).Value = convertToUrl(join(aDatei,"/"))

'args(0).Value = convertToUrl("/home/michael/test/" & sName & ".png") '<<<<<<<<<<<------------------------------hier den Speicherpfad für die .png's anpassen
'Exportieren
oFilter.setSourceDocument(oPage)
oFilter.filter(args())
Der Fehler erscheint bei "aDatei=split(oDoc.Url,"/")" und lautet: Objektvariable nicht belegt.
Da brauche ich noch einmal deine Hilfe.

Frage: Du sprichst von F3K Total; Wo finde ich denn das? Die Suche ist diesbezüglich nicht sehr klar.

Vielen Dank,
Marc

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

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von mikele » Sa 30. Dez 2023, 05:10

Hallo Marc,
F3K Total ist ein weiterer Nutzer, der dir den Vorschlag mit der Namensgebung der Folien gemacht hat und dir den Dialog programmiert hat.
Nun zum Fehler: Die Variable oDoc ist nicht definert. Ersetze einfach durch folgende Zeile:

Code: Alles auswählen

aDatei=split(ThisComponent.Url,"/")
Gruß,
mikele

LeFagnard
Beiträge: 12
Registriert: Fr 10. Nov 2023, 12:16

Re: Speichern einzelner Folien (impress) mit bestimmtem Namen

Beitrag von LeFagnard » Sa 30. Dez 2023, 13:30

Hallo mikele, hallo F3K,

dann möchte ich mich bei euch beiden noch einmal bedanken.
Ich habe viel gelernt, mit dem letzten Austausch auch noch, mit welcher Funktion ich den aktuellen Pfad finde.

Ich werde jetzt noch, ohne Eure Hilfe, versuchen, zu finden, wie ich in einem anderen Verzeichnis ein Ebene Höher speichern kann.
Ihr werdet von mir lesen.

Beste Grüße,
Marc


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