beim öffnen eines WriterDokuments Bild per Makro tauschen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von jh56 » Mi 14. Aug 2019, 12:08

Hallo,
ich habe Einen Serienbrief, bei dem ich in Abhängigkeit von Parametern eine ersetzen muss.

Wenn ich innerhalb des Dokumentes eine Makroaufzeichnung mache, kommt folgender Code heraus:

Code: Alles auswählen

sub changeImage
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ChangePicture", "", 0, Array())
end sub
Ich fügte diesen Makro dem Ereignis Dokument aktivieren hinzu. Er wird auch aufgerufen.
Der Makro funktioniert allerdings nur, wenn der Fokus auf dem richtigen Bild steht.
Sicherer wäre es, wenn ich das Bild(Bild1 oder Bild2) direkt anspreche und per Makro die Adresse der Bildquelle (Verzeichnis* Dateiname)
austausche.
Nach dem Öffnen des Dokuments finde ich im Zweig oDoc/GraphicObjects die Namen der Bilder.
Gibt es eine Möglichkeit diese explizit anzusprechen?

Im Writerforum finde ich anscheinend keine Programmierer, desshalb hier noch einmal.

Für Hilfe bedanke ich mich
Jürgen

nikki
Beiträge: 995
Registriert: Sa 18. Mär 2017, 22:25
Kontaktdaten:

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von nikki » Mi 14. Aug 2019, 12:25

Was willst du mit einem Anliegen bei LibreOffice Base (Datenbanken) ?
Gruß

---------------------------------------------------
Win.10 Prof. 64-bit, LO 6.3.4 (x64), LO 6.2.6 Portable, AOO 4.1.7

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von RobertG » Mi 14. Aug 2019, 15:04

Hallo Jürgen,

eventuell kannst Du über den Serienbrief da ran. Dann müsste das Bild eventuell in ein Bildkontrollfeld aus den Feldern, die für Formulare zur Verfügung stehen. habe ich so aber noch nie getestet.

Ansonsten ist für diesen Bereich wohl eher die Sparte "Programmierung" da.

Ginge vielleicht auch über den Namen der Graphic (ich schreibe das einmal so, wie im Programmiercode), bei der dann die GraphicURL geändert wird. An den Namen der Graphic kommst Du über

Code: Alles auswählen

Sub GraphicChange
oGraphics = thisComponent.getGraphicObjects()
oGraphic = oGraphics.getByName("Bild2")
oGraphic.GraphicURL = "file:///..../Bild3.JPG"
End Sub
Der Name des Bildes steht in den Eigenschaften des Bildes. Als URL ist die absolute URL einzugeben. Liegen die Bilder alle im gleichen Ordner, so ist das ja kein Problem. Ich habe das jedenfalls gerade mit einem Writer-Dokument über einen Button im Dokument erfolgreich hin bekommen.

edit: Code korrigiert

Gruß

Robert
Zuletzt geändert von RobertG am Fr 16. Aug 2019, 17:54, insgesamt 1-mal geändert.
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

musikai
Beiträge: 204
Registriert: Do 14. Mai 2015, 17:53

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von musikai » Do 15. Aug 2019, 14:19

Roberts Antwort ist eine gute Hilfe, um das Problem per Macro zu lösen.
RobertG hat geschrieben:
Mi 14. Aug 2019, 15:04

Code: Alles auswählen

oGraphic = oGaphics.getByName("Bild2")
bei "oGaphics" muss ein "r" rein. ;)

Code: Alles auswählen

oGraphic = oGraphics.getByName("Bild2")
Kleine Info: mit LO6.1 änderte sich in der API die Handhabung von verlinkten Bildern.
Das alte

Code: Alles auswählen

oGraphic.GraphicURL = FileURL
, welches Bilder verknüpfte, bettet sie nun ein. Um Bilder zu verknüpfen muss ab LO6.1 eine extra Funktion bemüht werden.
Hier nochmal Roberts (korrigierter) Code (mit "r") .
Mit folgendem Code wurden bis LO6.1 Bilder verknüpft, ab 6.1 werden sie eingebettet.

Code: Alles auswählen

rem--- mit diesem Code wurden bis LO6.1 Bilder verknüpft, ab 6.1 werden sie eingebettet.
Sub GraphicChange
imagefile = "E:\Eigene Bilder\Beispiel1.jpg"
imagefile2 = "E:\Eigene Bilder\Beispiel2.jpg"   
FileURL = converttourl(imagefile)  		 ' zum Testen mit imagefile oder imagefile2
oGraphics = thisComponent.getGraphicObjects()
oGraphic = oGraphics.getByName("Bild1")
oGraphic.GraphicURL = FileURL
End Sub
Mit folgendem Code werden Bilder stets nur verknüpft. Zum Ausführen werden die untenstehenden Funktionen benötigt.

Code: Alles auswählen

rem--- mit diesem Code werden Bilder stets nur verknüpft. Zum ausführen werden die untenstehenden Funktionen benötigt. 
Sub GraphicChange_linked
imagefile = "E:\Eigene Bilder\Beispiel1.jpg"
imagefile2 = "E:\Eigene Bilder\Beispiel2.jpg"
FileURL = converttourl(imagefile)		' zum Testen mit imagefile oder imagefile2
oGraphics = thisComponent.getGraphicObjects()
oGraphic = oGraphics.getByName("Bild1")
	if val(replace(replace(getOfficeVersion,"Dev",""),"LibreOffice",""))>6 then
		oGraphic.Graphic = getgraphfromurlaslink(FileURL)
	else
	    oGraphic.GraphicURL = FileURL
	end if
End Sub

function getOfficeVersion
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then GlobalScope.BasicLibraries.LoadLibrary("Tools")
getOfficeVersion =  GetProductName()
end function

rem--- for LO6.1+
function getGraphFromUrlAsLink(sFileUrl as String ) as Object 
  oProvider = createUnoService("com.sun.star.graphic.GraphicProvider") 
  Dim oPropsIN(1)as new com.sun.star.beans.PropertyValue 
  oPropsIN(0).Name  = "URL" 
  oPropsIN(0).Value = converttoURL(sFileUrl)
  oPropsIN(1).Name  = "LoadAsLink" 
  oPropsIN(1).Value = TRUE
  getGraphFromUrlAsLink = oProvider.queryGraphic(oPropsIN()) 
 end function
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von jh56 » Fr 16. Aug 2019, 11:10

Leider kapiere ich nicht was bei mir falsch läuft.

hier mein angepasster Code

Code: Alles auswählen

Sub GraphicChange_linked
imagefile = "/home/juergen/Dokumente/Mysql/Blumen_f_Besudi/1984/8401seng.tif"
imagefile2 = "/home/juergen/Dokumente/Mysql/Blumen_f_Besudi/1984/8402seg.tif"
FileURL = converttourl(imagefile2)		' zum Testen mit imagefile oder imagefile2
oGraphics = thisComponent.getGraphicObjects()
oGraphic = oGraphics.getByName("Bild1")
	if val(replace(replace(getOfficeVersion,"Dev",""),"LibreOffice",""))>6 then
		oGraphic.Graphic = getgraphfromurlaslink(FileURL)
	else
	    oGraphic.GraphicURL = FileURL
	end if
End Sub
er funktioniert in so weit , dass er einen Wert in die GraphicUrl einträgt (siehe nachfolgende Bildschirmfotos vorher und nachher.
vorändernurl.png
vorändernurl.png (314.78 KiB) 315 mal betrachtet
nachändernurl.png
nachändernurl.png (314.82 KiB) 315 mal betrachtet
allerdings wird das Bild nicht geändert und nicht gedruckt.
Wenn ich das Dokument in eine Datei drucke, hat das bild folgende Eigenschaften:
Gedrucktes Dokument.png
Gedrucktes Dokument.png (177.23 KiB) 315 mal betrachtet
Gibt es eventuell eine Methode des Documentes, um den Focus auf das Bild1 zu setzen? oder noch besser einen Verweis, welche Methoden ein Dokument besitzt (mit Bescchreibung der Parameter.

Gruß Jürgen

RobertG
Beiträge: 1959
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von RobertG » Fr 16. Aug 2019, 17:58

Hallo Jürgen,

versuche doch erst einmal die einfach Variante von mir.

Hast Du denn auch die Funktion getGraphFromUrlAsLink bei Dir mit eingebaut? Bei mir klappt das Ersetzen so jedenfalls auch mit dem ausführlichen Makro und LO 6.3.0.4.

Gruß

Robert
http://de.libreoffice.org/hilfe/dokumentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/map_3/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

jh56
Beiträge: 23
Registriert: Fr 16. Mär 2018, 11:17

Re: beim öffnen eines WriterDokuments Bild per Makro tauschen

Beitrag von jh56 » Mo 19. Aug 2019, 12:07

Problem ist gelöst.
beide Makros funktionieren (Robert und Muikai).

Das Problem lag in den Schutzeinstellungen des Dokumentes. Es ist ein Formular, das außer im Bild nur durch die Inhalte einer Datenbank geändert werden darf. In diesem Fall muss das Bild direkt beim Öffnen eingefügt werden, was nun funktioniert.
Danke für die freundliche Hilfe!! :D
Jürgen

Antworten