zu meinem Thema habe ich nichts Annäherndes im Forum gefunden (was nichts heißen muss), sodass die Sache hoffentlich von breiterem Interesse ist.
Mein Makro soll Zellen mit Pfeilen verbinden, deren Farbe und Stärke von den Zelleninhalten abhängt.
Nachfolgend das Unterprogramm für das Setzen der Pfeile, der Übersichtlichkeit halber mit festen Werten und auf seine Grundstruktur „eingedampft“.
Code: Alles auswählen
Sub Pfeil_setzen
Dim xLinie, xZelle1, xZelle2, xFolie As Object
Dim oTabelle As Object
Dim oPunkt As New com.sun.star.awt.Point 'Position eines Punktes
Dim xRechteck As New com.sun.star.awt.Size 'umschreibendes Rechteck
oTabelle = ThisComponent.Sheets().getByName("Tabelle")
xZelle1 = oTabelle.getCellByPosition(1, 2)
xZelle2 = oTabelle.getCellByPosition(3, 4)
oPunkt.X = xZelle1.Position.X 'linke obere Ecke
oPunkt.Y = xZelle1.Position.Y 'linke obere Ecke
xRechteck.Width = xZelle2.Position.X - oPunkt.X 'Breite
xRechteck.Height = xZelle2.Position.Y - oPunkt.Y 'Höhe
xLinie = ThisComponent.createInstance("com.sun.star.drawing.LineShape")
With xLinie
.Position = oPunkt 'Beginn
.Size = xRechteck 'umschreibendes Rechteck
.LineWidth = 100 'Linienstärke
.LineColor = RGB(8, 128, 1) 'Linienfarbe
End With
xFolie = oTabelle.getDrawPage()
'Die Linie in eeine Folie einfügen und mit Pfeilspitze versehen (diese Reihenfolge ist zwingend)
xFolie.add(xLinie)
xLinie.LineEndName = "Arrow concave"
End Sub
1. Während ich über LineWidth die Linienbreite vergrößere, bleibt die Pfeilspitze unverändert. Ist das halt so komisch oder mache ich etwas falsch?
2. Wo sind Services wie "com.sun.star.drawing.LineShape“ dokumentiert? Konkret suche ich etwas wie LineType oder LineStyle = „dashed“ für gestrichelte Linie.
3. Wie bekomme ich ‑für eine Aktualisierung der Ansicht- die Pfeile wieder weg, damit ich neue setzen kann? Meine vergeblichen Versuche gehen in untenstehende Richtung. Um die Folien zu löschen, könnte ich sie auch namentlich ansprechen. Aber ich weiß nicht wo und wie ich die Namen vergeben müsste und vermute einen einfacheren Weg, da ich ja alle Pfeile (Folien) entfernen möchte.
Code: Alles auswählen
Sub Pfeil_loeschen
Dim xFolien As Object
Dim oDoc, oTabelle As Object
''oTabelle = ThisComponent.Sheets().getByName("Tabelle")
''xFolien = oTabelle.getDrawPages()
oDoc = ThisComponent
xFolien = oDoc.getDrawPages()
xFolien.remove(xFolien.getByIndex(0))
End Sub
Rudi