Frage stellen
0

Kompletten Ordner mit Bildern per Makro einfügen

gefragt 2019-11-05 09:26:54 +0100

norrin@mailbox.org Gravatar-Bild

updated 2019-11-07 09:53:16 +0100

Hallo. Um mich endgültig von Word und damit Windows lösen zu können, benötige ich einen Makro, der folgendes kann:

  • jpg-Fotos (alle mit gleicher Größe) aus einem Ordner einfügen
  • darunter eine Beschriftung mit Nummerierung (Foto 1, Foto 2 etc.) einfügen und ein Text (TEXT1), der anfangs abgefragt werden müsste
    • schön wäre noch, wenn hinter dem TEXT1 der Dateiname und das Aufnahmedatum (aus den EXIF-Daten) angegeben würde

Das ist der Plan, aber mit einer funktionierenden Foto-einfügen-Schleife wäre ich natürlich schon zufrieden. ;)

Gruß norrin

PS: Here the same question in english: https://ask.libreoffice.org/en/questi...

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

Englisch: https://ask.libreoffice.org/en/questi...

Bei Crossposting bitte gegenseitig verlinken. Danke.

Bei keine Antwort schreiben, wenn es nicht eine Lösung zur Eingansfrage ist.

Editiere jeweils deine Frage oder bei Bedarf schreibe einen Kommentar. Danke.

ebot Gravatar-Bildebot ( 2019-11-05 10:02:00 +0100 )Bearbeiten

1 Antwort

0

geantwortet 2019-11-06 17:29:28 +0100

RobertG Gravatar-Bild

updated 2019-11-06 21:51:53 +0100

Ich habe das einmal aus diversen Quellen zusammengepackt und zumindest die Schleife für die Bilder untereinander drin, so dass jedes Bild an einem separaten Anker hängt und daneben ein Absatz existiert, die Bilder also nicht einfach übereinander gepackt werden:

SUB GrafikenEinfuegen
GlobalScope.BasicLibraries.LoadLibrary("Tools")
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oTxtRange AS OBJECT
DIM stUrl AS STRING
DIM stFile AS STRING
DIM oText AS OBJECT
oDoc = ThisComponent
oDrawpage = oDoc.getDrawpage()
stUrl = oDoc.URL
stUrl = Left(stUrl, len(stUrl)-len(RetrieveFileName(oDoc))) & "Bilder"
stFile = Dir$(stUrl + getPathSeparator + "*",0)
oText = oDoc.text
oCursor = oText.createTextCursor()
DIM oLinie AS NEW com.sun.star.table.BorderLine
oLinie.innerLineWidth = 0
oLinie.outerLineWidth = 0
Do
    If stFile <> "." And stFile <> ".." Then
        stDir = stFile     
        oTxtRange = oText.getEnd()
        oFrame = oDoc.createInstance("com.sun.star.text.TextFrame")
        oFrame.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
        oFrame.width = 10000
        oFrame.height = 10000
        oText.InsertTextContent(oTxtRange, oFrame, FALSE)
        oFrameCur = oFrame.createTextCursor()
        oFrameCur.charHeight = 12
        oFrameCur.String = stFile
        oFrame.BorderDistance = 0
        oFrame.LeftBorder = oLinie
        oFrame.RightBorder = oLinie
        oFrame.TopBorder = oLinie
        oFrame.BottomBorder = oLinie
        oGrafik = oDoc.createInstance("com.sun.star.text.GraphicObject")
        stUrl1 = stUrl & getPathSeparator & stFile
        oGrafik.GraphicURL = stUrl1
        oGrafik.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
        oFrame.InsertTextContent(oFrameCur, oGrafik, FALSE)
        oGrafik.height = oGrafik.ActualSize.height
        oGrafik.width = oGrafik.ActualSize.width
        oFrame.SurroundAnchorOnly = TRUE
        Dim aSize As New com.sun.star.awt.Size
        aSize.width = oGrafik.ActualSize.width
        aSize.height = oGrafik.ActualSize.height + 50
        oFrame.Size = aSize
        oText.insertString(oCursor, CHR(13) ,false)
        oGrafik.Name = stFile
    End If
    stFile = Dir$
Loop Until stFile = ""
END SUB

Die Variablen sind nicht alle deklariert. Die Bilder liegen unterhalb des Textdokumentes in einem Verzeichnis "Bilder". In diesem Verzeichnis darf nach der Konstruktion nichts anderes liegen, denn alle dort enthaltenen Dateien werden als Grafiken gesehen, die eingefügt werden können.

Mal sehen, ob ich auch noch die Zeit habe, die Unterschriften usw. zu ermitteln.

Habe ich gemacht: Bilder in Frames, Bildunterschrift (Dateinamen) sowie Bilder in den Frames.

Bearbeiten Melden löschen Link mehr

Kommentare

So, habe das erstmal auf meinem Windows-PC getestet. Die Writer-Datei liegt gemeinsam mit einem Ordner "Bilder" (dort sind 4 jpegs enthalten) in einem Verzeichnis.

Ich bekomme folgenden fehler (Zeile 49):

BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten 
Type: com.sun.star.uno.RuntimeException
norrin@mailbox.org Gravatar-Bildnorrin@mailbox.org ( 2019-11-07 09:54:08 +0100 )Bearbeiten

Da kann ich jetzt lange suchen um die Zeile zu finden. Teste erst einmal hiermit: ZIP-Datei mit Writerdatei und Bildern. Da liegen in der Bilderdatei auch schon die EXIF-Informationen in einer Textdatei. Ich habe es bisher nicht hinbekommen, das während des Makros automatisch ablaufen zu lassen ...

RobertG Gravatar-BildRobertG ( 2019-11-07 19:31:00 +0100 )Bearbeiten

Screenshot Sieht das bei dir nicht auch so aus? Das betrifft also die 5. Zeile von unten (!) deines oben geposteten Makros.

Ich versuche es mal mit der zip-Datei Danke. EDIT: der Link kann nicht stimmen

norrin@mailbox.org Gravatar-Bildnorrin@mailbox.org ( 2019-11-07 22:15:07 +0100 )Bearbeiten

Alles klar, war der Link von meinem Rechner - aus unerfindlichen Gründen. Writer_Bilder

Der obige Makrocode funktioniert bei mir ohne Probleme.

RobertG Gravatar-BildRobertG ( 2019-11-08 13:01:58 +0100 )Bearbeiten

Ok, dannn liegt es an meinem PC/Windows. Selbe Fehlermeldung beim Ausführen des Makros in deiner Datei http://prntscr.com/pu7hhm

Teste das später noch auf dem Linux-Notebook.

norrin@mailbox.org Gravatar-Bildnorrin@mailbox.org ( 2019-11-08 13:25:21 +0100 )Bearbeiten

setze einmal diesen Namen in Form eines Zählers: Vor do einsetzen i=1 Dann oGrafik.Name = stFile ändern zu oGrafik.Name = "Bild" & i, anschließend i=i+1

Es kann sein, dass unter Windows die Bezeichnung der Grafik nicht mit Punkten möglich ist. Ich habe für die Bezeichnung ja einfach den Dateinamen gewählt. Wenn Du keinen Namen zuweist funktioniert das Makro auch (auskommentieren mit rem). Nur wird dann das Bild nicht im Navigator angezeigt.

RobertG Gravatar-BildRobertG ( 2019-11-08 16:00:11 +0100 )Bearbeiten

Kleine Ergänzung: Habe das jetzt noch einmal überarbeitet und erneut unter dem Link bereitgestellt. Das Erstellen der Nummernkreis-Beschriftung war etwas härteres Brot. Auch die EXIF-Informationen auszulesen gehen so nur, wenn vorher z.B. über ImageMagic die Informationen in Textdateien vorliegen. Dazu habe ich keine andere Lösung gefunden.

Wenn Du raus hast, was bei dem Grafiknamen falsch ist, dann poste das hier - oder Mail mich direkt an. Dann ändere ich anschließend die ursprüngliche Antwort.

RobertG Gravatar-BildRobertG ( 2019-11-08 18:14:26 +0100 )Bearbeiten

Hallo Robert, würde gern produktives Feedback geben, aber der Makro läuft bei mir nicht. Weder auf zwei Windows- noch auf dem Linux-Notebook. Habe die Libre-Office-Versionen geupdatet. die Makrosicherheit herunter gesetzt, aber es passiert nichts (auch keine Fehlermeldung). Die Java-JRE-Meldung ist ein Bug, wenn ich das richtig verstanden habe und weder Schaltfläche, noch das Ausführen über Makro-Menü klappen. :(

norrin@mailbox.org Gravatar-Bildnorrin@mailbox.org ( 2019-11-11 11:03:30 +0100 )Bearbeiten

Ich habe da noch weitere Updates hinterhergeschoben - alle funktionieren hier. Bei der letzten Version habe ich auch oGrafik.Name geändert ...

Du hast doch wohl einfach den Ordner entpackt und dann die Writerdatei geöffnet, oder?

Wenn gar nichts passiert helfe ich mir immer damit, erst einmal in die Prozedur eine Messagebox zu schreiben: msgbox "Hallo". Wenn Du die nicht siehst, dann stimmt etwas grundlegend nicht an der Makroausführung.

Lass uns das gegebenenfalls per privater Mail weiter klären. Kannst Du über meine Homepage erfahren.

RobertG Gravatar-BildRobertG ( 2019-11-11 16:22:34 +0100 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2019-11-05 09:26:54 +0100

Angesehen: 100 Mal

Aktualisiert: Nov 07