🙏 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!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst] Vorhandenes Bild per Makro nach unten verschieben
[gelöst] Vorhandenes Bild per Makro nach unten verschieben
Hallo!
Ich bin schon wieder auf ein neues Problem gestoßen!
Ich habe zwar einige Forumsbeiträge zu diesem Thema gefunden, aber keine Lösung war Zielführend!
Also: ich habe in einer Tabelle ein Bild, mit dem ein Makro gestartet wird. Dieses Makro trägt Werte unter die bestehende Tabelle. Jedes Mal, wenn das Makro ausgeführt wird, kommt also eine beschriebene Zeile hinzu!
Jetzt möchte ich, dass sich am Ende des Makros die Grafik um einen bestimmten Wert nach unten verschiebt, damit sie immer am Ende der Tabelle bleibt.
In anderen Foren bin ich oft auf die Methode Bild.HoriOrientPosition oder Bild.HoriOrient gestoßen. Diese Methode kennt das Makro aber anscheinend nicht.
Vielen Dank im Voraus!
Ich bin schon wieder auf ein neues Problem gestoßen!
Ich habe zwar einige Forumsbeiträge zu diesem Thema gefunden, aber keine Lösung war Zielführend!
Also: ich habe in einer Tabelle ein Bild, mit dem ein Makro gestartet wird. Dieses Makro trägt Werte unter die bestehende Tabelle. Jedes Mal, wenn das Makro ausgeführt wird, kommt also eine beschriebene Zeile hinzu!
Jetzt möchte ich, dass sich am Ende des Makros die Grafik um einen bestimmten Wert nach unten verschiebt, damit sie immer am Ende der Tabelle bleibt.
In anderen Foren bin ich oft auf die Methode Bild.HoriOrientPosition oder Bild.HoriOrient gestoßen. Diese Methode kennt das Makro aber anscheinend nicht.
Vielen Dank im Voraus!
Zuletzt geändert von Oscar B am Sa 30. Jan 2021, 18:46, insgesamt 1-mal geändert.
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)
Re: Vorhandenes Bild per Makro nach unten verschieben
Hallo Oscar,
fallbezogen muss man für Größenangabe und auch Positionsangabe u.U. ein sogenanntes Struct deklarieren.
Structs werden auch constants groups genannt:
oder auch:
Die Referenzierung mit dem Präfix a steht hierbei für Structure.
Siehe hier Konventionen...
Wenn die Variable "aGrafikGroesse" mit Xray (siehe weiter unten) untersucht, erkennt man was sich dahinter verbirgt:
oder auch:
Ergänzend diese API-Websites:
constants group POSSIZE
SIZE Struct Reference
Constant Group Reference POSSIZE
Ich weise hier ausdrücklich daraufhin, dass der Name u.U. in Großbuchtsaben geschrieben werden muss
Ich weiß nicht welche Regel hinter der Großschreibung steht, bin aber selbst schon mal daran verzweifelt,
dass ein Code niicht funktioniert, bis ich dann irgendwo im Netz über die Großschreibung gestolpert bin.
Bei Verwendung von SIZE scheint diese Regelung nicht wichtig zu sein, dennoch schreibe ich SIZE groß.
Hier ein Beispielcode, welchen ich für ein Writer-Dokument erstellt habe:
Damit der Code funktioniert, musst Du ein Bild in einem Writerdokument markieren
Im Code findest Du auskommentierte Zeilen wie etwa:
Xray ist ein Codeinpektions-Tool.
Es handelt sich hierbei um eine Writer-Datei, inklusive deutschsprachige Dokumentation.
X-Ray tool von Bernard Marcelly
Wichtig für den Anfang sind die Seiten 5 und 7
Info zur Bibliothek "Tools"
In dieser Bibliothek sind vorgefertigte Funktionen, auf die man in seinem eigenen Code zugreifen kann:
Basic IDE → Objektkatalog → LibreOffice Makros & Dialoge → Tools
Ich nutze relativ häufig Funktionen aus dem Modul "Strings"
U.a. ist es bei Datei(namen)-Operationen sehr hilfreich:
fallbezogen muss man für Größenangabe und auch Positionsangabe u.U. ein sogenanntes Struct deklarieren.
Structs werden auch constants groups genannt:
Code: Alles auswählen
Dim aGrafikGroesse As new com.sun.star.awt.SIZE
Code: Alles auswählen
Dim aGrafikPosSize As new com.sun.star.awt.POSSIZE
Siehe hier Konventionen...
Wenn die Variable "aGrafikGroesse" mit Xray (siehe weiter unten) untersucht, erkennt man was sich dahinter verbirgt:
Code: Alles auswählen
xray aGrafikGroesse
Code: Alles auswählen
xray aGrafikPosSize
constants group POSSIZE
SIZE Struct Reference
Constant Group Reference POSSIZE
Ich weise hier ausdrücklich daraufhin, dass der Name u.U. in Großbuchtsaben geschrieben werden muss

Ich weiß nicht welche Regel hinter der Großschreibung steht, bin aber selbst schon mal daran verzweifelt,
dass ein Code niicht funktioniert, bis ich dann irgendwo im Netz über die Großschreibung gestolpert bin.
Bei Verwendung von SIZE scheint diese Regelung nicht wichtig zu sein, dennoch schreibe ich SIZE groß.
Hier ein Beispielcode, welchen ich für ein Writer-Dokument erstellt habe:
Code: Alles auswählen
REM ***** BASIC *****
'***************************************************************************
' Dieser Code erfasst ein markiertes Bild, schneidet es zu, ändert
' dessen Größe und verschiebt das Bild an seine Zielposition.
'***************************************************************************
Sub PicDaten
Dim oDoc as object
Dim oShape as Object
Dim oPage as Object
Dim oGraphicCrop as Object
Dim oSel as Object
Dim nIndexDraw as Integer
Dim i as Integer
oDoc=ThisComponent
' aktuelle Markierung/ Selektion erfassen
oSel = oDoc.CurrentSelection
' Prüfen ob sich der Inhalt der Selektion ein Grafikobjet ist
' Wenn kein Bild, dann Programm beenden
If oSel.ImplementationName <> "SwXTextGraphicObject" Then
Exit Sub
End If
' xray oSel
' Dem aktuellen Bild einen vorläufigen Namen zuweisen,
' zweck späterer Identifikation
oSel.setName("Post")
oPage = oDoc.drawPage
' xray oPage
' Objektzuweisung für das gewünschtes Bild
for i = 0 to oPage.count
oShape = oPage.getByindex(i)
if oshape.name = "Post" then
nIndexDraw=i
exit for
End if
next i
'xray oShape(nIndexDraw)
'------------------- Daten zuschneiden ------------------------------------------------------
oGraphicCrop = oShape(nIndexDraw).GraphicCrop
' Zuschnitte festlegen
With oGraphicCrop
.Top = 8489
.Bottom = 6200
.Left = 10000
.Right = 2850
End with
'xray oGraphicCrop
' Daten entsprechend der obigen Parameter zuschneiden
oShape(nIndexDraw).GraphicCrop = oGraphicCrop
'--------------------------------------------------------------------------------------------
'------------------- Daten Größe ändern ------------------------------------------------------
Dim nB as Long
Dim nH as Long
' Variablen für die Daten Größe
nB=2.35*1000 ' Höhe Daten 2,35
nH=0.86*1000 ' Breite Daten 0,86
' Größenobjekt erstellen
Dim aGrafikGroesse As new com.sun.star.awt.SIZE
' Größenzuweisung
With aGrafikGroesse
.height = nH
.width = nB
End With
'Größe entsprechend der obigen Parameter zuschneiden und zuweisen
oShape(nIndexDraw).setSize(aGrafikGroesse)
'--------------------------------------------------------------------------------------------
'------------------- Daten an Zielposition verschieben ---------------------------------------
With oShape(nIndexDraw)
.HoriOrientPosition=7600 ' = cm * 1000
.VertOrientPosition=6300-860 ' = cm * 1000 [840 = 0,84cm = relative Höhe des Bildes]
End With
'--------------------------------------------------------------------------------------------
'----------------- Daten einen neuen Bildnamen geben -------------------------------------
' Bildname = Daten & _ & Zufallszahl (Integer aus Datum)
' das heutige Datum erfassen
Dim xD as Date
Dim nZufall as Long
xD=Date
' Zufallszahl berechnen
nZufall = Int((xD * Rnd) -2)
' dem markierten Objekt einen neuen Namen zuweisen.
oShape(nIndexDraw).Name="Daten_" & nZufall
End Sub

Im Code findest Du auskommentierte Zeilen wie etwa:
Code: Alles auswählen
' xray oSel
Es handelt sich hierbei um eine Writer-Datei, inklusive deutschsprachige Dokumentation.
X-Ray tool von Bernard Marcelly
Wichtig für den Anfang sind die Seiten 5 und 7
- Auf Seite 5 findest Du Schaltflächen, mit denen Du Xray de/ installieren kannst.
- Auf Seite 7 wird beschrieben, wie Du Xray in Dein Office integrieren kannst, bzw.
was erforderlich ist wie Xray standardmäßig bei Officestart geladen werden kann.
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM BASIC-IDE:
REM 1) LoadingLibraries
REM
REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM (1)
REM Bibliotheken bie LibreOffice-Start laden
Sub LoadingLibraries
' Hier in der Basic-IDE -> Objektkatalog
' LibreOffice Makros & Dialoge -> Tools
Globalscope.BasicLibraries.LoadLibrary ( "Tools")
'https://extensions.openoffice.org/en/project/mri-uno-object-inspection-tool
' Fuer Libreoffice: https://extensions.openoffice.org/en/projectrelease/mri-uno-object-inspection-tool-133
REM Globalscope.BasicLibraries.LoadLibrary ( "MRILib")
' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial
'http://berma.pagesperso-orange.fr/Files_en/XrayTool60_de.odt
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
End Sub
In dieser Bibliothek sind vorgefertigte Funktionen, auf die man in seinem eigenen Code zugreifen kann:
Basic IDE → Objektkatalog → LibreOffice Makros & Dialoge → Tools
Ich nutze relativ häufig Funktionen aus dem Modul "Strings"
U.a. ist es bei Datei(namen)-Operationen sehr hilfreich:
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: Vorhandenes Bild per Makro nach unten verschieben
Vielen Dank für die Antwort!
Dein Code ist (mal wieder
) sehr nützlich und lehrreich!
Für dieses Problem habe ich mir jetzt aber einen anderen Code geschrieben!
So verschiebt sich das Bild immer mit, wenn in der Tabelle eine neue Zeile beschrieben wird!
Grüße
Oscar
Dein Code ist (mal wieder

Für dieses Problem habe ich mir jetzt aber einen anderen Code geschrieben!
Code: Alles auswählen
Sub Bildverschieben
Dim Zeile as Long
doc=thisComponent
sheet=doc.sheets.getbyname("Tabelle1")
Page=sheet.drawPage
Zeile=10 'Im Orginalcode wird hier die Zeile ermittelt, die als nächstes beschrieben wird
zBildanker=sheet.getcellrangebyname("B" & Zeile)
Bild=Page.getbyIndex(0)
Bild.Anchor = zBildanker
end sub
Grüße
Oscar
LibreOffice Version 7.1.1.2 (x64) - Windows 10 (x64)
Re: [gelöst] Vorhandenes Bild per Makro nach unten verschieben
Hallo Oscar,
auch Dir einen herzlichen Dank.
Einen solches Problem hatte ich noch nicht und habe jetzt von Dir etwas gelernt.
Deinen Code werde ich zugegebner Zeit testen.
bis dann...
auch Dir einen herzlichen Dank.

Einen solches Problem hatte ich noch nicht und habe jetzt von Dir etwas gelernt.
Deinen Code werde ich zugegebner Zeit testen.
bis dann...
Gruß
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
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.