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?
BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> 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?
Re: Makro mit Graikeigenschaften?
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.
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:
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:
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.
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:
- LibreOffice
https://api.libreoffice.org/docs/idl/ref/files.html - OpenOffice
http://www.openoffice.org/api/docs/comm ... dex-1.html
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
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 ❤️