BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro mit Graikeigenschaften?

Komponentenübergreifende Themen zu Libreoffice
Antworten
Georgee1
Beiträge: 3
Registriert: Fr 18. Sep 2020, 14:29

Makro mit Graikeigenschaften?

Beitrag von Georgee1 » Fr 4. Jun 2021, 18:18

Ich habe ein Makro per Aufnahmerekorder erstellt, bei dem eine Grafik aus einer Datei in ein Writer Dokument eingefügt wird.
Dabei wird die Grafik mit dem Umlauf Otimal und ca. 1/3 zu groß eingefügt. Bevor ich die Makroaufnahme abgeschlossen habe, habe ich den Umlauf auf Durchlauf geändert und die Größe geändert.
Führe ich nun das Makro aus, wird zwar die Grafikdatei eingefügt, die Umlauf- und Größenänderung wird aber nicht ausgeführt. Diese muss ich händisch jedesmal aufs neue ausführen.
Gibt es eine Möglichkeit auch diese Grafikeigenschaften mit in das Makro zu übernehmen?

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Makro mit Graikeigenschaften?

Beitrag von craig » Mo 7. Jun 2021, 12:54

Hallo,

der Makrorekorder zeichnet nur rudimentäre Funktionen, bzw. Befehle auf.
Spezielle Anweisungen sind nur mittels API und der Starbasic-Programmierung möglich.
Dies ist ein sehr weites Feld und es bedarf einiger Einarbeitungszeit bis man einen gewissen Duchblick bekommt.

Ursprung der API ist das Openoffice API, welches später von LibreOffice übernommen wurde.
Daraus folgt, dass man die Openoffice-API und die LibreOffice-API zur Programmierung nutzen kann.
Aber Vorsicht!
Mittlerweile bewegen sich die API's auseinander.
D.h. Befehle welche in Libreoffice funktionieren, versteht Openoffice nicht mehr und umgekehrt.
Erschwerend kommt hinzu, dass neuere API-Anweisungen in älteren Office-Versionen auch nicht mehr funktionieren.
Ist aber auch keine Eigenheit von den freien Office-Paketen. :x
Es gibt aber keine Liste, in der man nachsehen kann, was funktioniert und was nicht.
Ich habe bei mir zu Testzwecken mehrere Officepakete installiert, auch ältere LibreOffice-Versionen.

Hier die Links zu den API-Seiten: diverse Links:
https://wiki.documentfoundation.org/Dev ... chCommands

https://wiki.openoffice.org/wiki/DE/Mak ... c_Tutorial (Beachte besonders das X-RAY-Tool zur Codeinspektion!)
https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf
http://www.starbasicfaq.de/index.html

Nun ein Beispielcode zur Bildbearbeitung in Writer.
Beachte bitte die Kommentare im Code:

Code: Alles auswählen

REM  *****  BASIC  *****

REM **********************************************************************************************************************
REM
REM												Bildbearbeitungs-Makro
REM		1)	Einfügen eines Bildes in das Writerdokument mittels Dispatch-Commands
REM		2)	Prüfen, ob aktuelle Markierung ein Bild ist
REM		3)	Für das Bild einen vorläufigen Namen vergeben
REM		4)	Drawpage-Index des Bildes ermitteln
REM		5)	optionaler Code zum Zuschneiden (crop) des Bildes
REM		6)	Bildgröße ändern
REM		7)	Bild neu positionieren		
REM		8) Einen eindeutigen Namen für das Bild per Zufallsgenerator vergeben
REM
REM **********************************************************************************************************************

Sub Bildbearbeitung

REM --------------------------------------------------------------------------------------------------------------------------------------------
REM Dispatcher-Comand zum Einfügen eines BIldes aus URL-Angabe
rem --------------------------------------------------------------------------------------------------------------------------------------------
rem define variables
Dim document   as object
Dim dispatcher as object
Dim sUrl as String

rem ----------------------------------------------------------------------
rem Hier ggf. die URL anpassen
rem Leerzeichen in der Angabe müssen mit %20 maskiert werden!!!
sURL="file:///C:/temp%202021/_LibreOffice%20Logo.jpg"

rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = sURL
args1(1).Name = "FilterName"
args1(1).Value = "<Alle Bilder>"
args1(2).Name = "AsLink"
args1(2).Value = false
args1(3).Name = "Style"
args1(3).Value = "Bilder"

rem ----------------------------------------------------------------------
rem einfügen des BIldes mit den zuvor angegebenen Argumenten/ Eigenschaften
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())

REM --------------------------------------------------------------------------------------------------------------------------------------------
rem BILDBEARBEITUNG
rem Zuweisung der Eigenschaften, Structs, Konstanten, Methoden, usw.

rem Hinweis:
rem Nachdem das Bild per obigen Kommandos eingefügt wurde, ist das Bild markiert.
rem Deshalb kann man die Markierung nutze, um das Bild zu bearbeiten.
rem Hierzu muss man aus der Marikierung/ Selektion ein Objekt generieren.
rem Das anfängliche Objekt enthält ereits diverse Eigenschaften, Structs, Konstanten, Methoden, usw.,
rem diese gilt es nun zu ändern.
rem Der Änderung kann nur mittels Starbasic-Anweisungen, bzw. der API vorgenommen werden.

REM Deklaration der Variablen
REM Objekt-Variablen
Dim oDoc as Object
Dim oSel as Object
Dim oDPage as Object
Dim oShape as Object
Dim oGraphicCrop as Object


REM Variablen für Structs und Konstanten

REM Long Variablen
Dim nIndex as Long
Dim nIndexDraw as Long

Dim nB as Long
Dim nH as Long

REM String-Variablen
	' Referenz: Das aktuelle Dokument, also das Dokument welches augenblicklich den Fokus besitzt.
	' Ausgenommen ist hierbei diese Basic-IDE
	oDoc=ThisComponent
	
    	' Referenz: Aktuelle Markierung/ Selektion
	    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
		Msgbox "Ungültige Markierung!" & CHR(10) & CHR(10) & "Das Programm wird beendet!",48,"A N W E N D E R - F E H L E R: Ungültige Markierung!"
	       Exit Sub
    End If 

	' Dem aktuellen Bild einen vorläufigen Namen zuweisen, 
	' zweck späterer Identifikation	
	oSel.setName("MeinBild")
		' Referenz: "Zeichnungs-Ebene"
		oDPage = oDoc.drawPage
 
   'Referenz: Objektzuweisung für das gewünschtes Bild (oShape)
   for nIndex = 0 to oDPage.count
	   oShape = oDPage.getByindex(i)
	   if oShape.name = "MeinBild" then
		   	nIndexDraw=nIndex
		   		exit for
	   End if
   next nIndex
   

REM ------------------- So kann ein BIld zugeschnitten werden  ------------------------------------------------------
REM optionaler Code
rem Zur Aktivierung der Zuschneideoptionen, müssen zuvor alle doppelten ( nur die doppelten '' )
rem Hochkommas vor den Zeilen entfernt werden!
'' oGraphicCrop = oShape.GraphicCrop
	' Zuschnitte festlegen
	' 1000 = 1cm = 10mm
''	With oGraphicCrop
''		.Top = 1000
''		.Bottom = 14000
''		.Left = 500 
''		.Right = 2000
''	End With
rem Bild entsprechend der obigen Parameter zuschneiden
''oShape.GraphicCrop = oGraphicCrop


REM ------------------- Bild-Größe ändern ------------------------------------------------------
REM Größenobjekt, bzw. Struct erstellen
Dim aGrafikGroesse As new com.sun.star.awt.Size

rem Hier ggf. die Bildmaße anpassen:
rem Variablen für die Bild-Größe
nH=0.56*1000	' Bild-Höhe
nB=2.11*1000	' Bild-Breite

' Größenzuweisung
	With aGrafikGroesse
		.height = nH
		.width = nB
	End With

rem Größe entsprechend der obigen Parameter dem Bild zuweisen
oShape.setSize(aGrafikGroesse)


REM------------------- Bild an Zielposition verschieben ---------------------------------------
With oShape
	.HoriOrientPosition=5500			' 5,5 cm vom linken Seitenrand
	.VertOrientPosition=6000-560		' 6 cm - 0,56 cm (relative Bildhöhe) vom oberen Seitenrand
End With


REM ----------------- Dem Bild einen neuen eindeutigen Namen geben -------------------------------------
'	Bildname = Bild & _ & Zufallszahl (Integer aus Datum) 
' 	das heutige Datum erfassen
Dim xD as Date
Dim nZufall as Long
	xD=Date
	' Zufallszahl berechnen
    nZufall = Int(xD * Rnd)

		' dem markierten Objekt einen neuen Namen zuweisen.
		oShape.Name="Bild_" & nZufall

End Sub
Gruß

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 nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten