Seite 1 von 1

[gelöst] Makro für Tabelle funktioniert nicht richtig

Verfasst: Fr, 19.12.2025 20:38
von HaJoBo
Hallo,
Ich habe eine Tabelle mit mehreren Zeilen und Spalten
Wenn ich über Rechtsklick/Tabelle einen dickeren Außenrand mit Schatten setze, dann funktioniert das.
Wenn ich damit eine Makro aufzeichne und dann ausführe ist der dickere Rand auch vorhanden - ABER - die inneren Linien sind alle weg (also ausgegraut). Ich weiß nicht weiter.....
Hier der Code:

Code: Alles auswählen

sub Rahmen
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:BorderInner", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(7) as new com.sun.star.beans.PropertyValue
args2(0).Name = "BorderOuter.LeftBorder"
args2(0).Value = Array(39321,35,35,35)
args2(1).Name = "BorderOuter.LeftDistance"
args2(1).Value = 97
args2(2).Name = "BorderOuter.RightBorder"
args2(2).Value = Array(39321,35,35,35)
args2(3).Name = "BorderOuter.RightDistance"
args2(3).Value = 97
args2(4).Name = "BorderOuter.TopBorder"
args2(4).Value = Array(39321,35,35,35)
args2(5).Name = "BorderOuter.TopDistance"
args2(5).Value = 97
args2(6).Name = "BorderOuter.BottomBorder"
args2(6).Value = Array(39321,35,35,35)
args2(7).Name = "BorderOuter.BottomDistance"
args2(7).Value = 97

dispatcher.executeDispatch(document, ".uno:BorderOuter", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(3) as new com.sun.star.beans.PropertyValue
args3(0).Name = "BorderShadow.Location"
args3(0).Value = com.sun.star.table.ShadowLocation.BOTTOM_RIGHT
args3(1).Name = "BorderShadow.Width"
moderation: Codetags eigefügt, von Writer nach Makros verschoben

Re: Makro für Tabelle funktioniert nicht richtig

Verfasst: Sa, 20.12.2025 18:31
von mikeleb
Hallo,
der Dispatcher setzt offensichtlich den (äußeren) Rahmen und überschreibt alle anderen Linien (mit der Breit 0).
Sinnvoller ist es, über die Methoden der API zu gehen. Mit ein bisschen Spicken bei Andrew Pitonyak:

Code: Alles auswählen

Sub rahmen

	oDoc=ThisComponent
	oTab=oDoc.TextTables.getByName("Tabelle1") 'den entsprechenden Tabellennamen einsetzen
	liniendicke=50
	innerelinien=2
	v = oTab.TableBorder 'Struct Tabellenrahmen (Kopie)
	x = v.TopLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = liniendicke 	'Äußere Linienstärke (InnerLineWidth = 0, also nur eine Linie)
	v.TopLine = x
	x = v.LeftLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = liniendicke 	'Äußere Linienstärke (InnerLineWidth = 0, also nur eine Linie)
	v.LeftLine = x
	x = v.TopLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = liniendicke 	'Äußere Linienstärke (InnerLineWidth = 0, also nur eine Linie)
	v.BottomLine = x
	x = v.TopLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = liniendicke 	'Äußere Linienstärke (InnerLineWidth = 0, also nur eine Linie)
	v.BottomLine= x
	x = v.RightLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = liniendicke 	'Äußere Linienstärke (InnerLineWidth = 0, also nur eine Linie)
	v.RightLine = x
	x = v.VerticalLine 'Struct senkrechte Zelltrennlinien
	x.OuterLineWidth = innerelinien
	v.VerticalLine = x 'Struct waagerechten Zelltrennlinien
	x = v.HorizontalLine
	x.OuterLineWidth = linien
	v.HorizontalLine = x
	'Tabellenrahmen setzen
	oTab.TableBorder=v
	'Schatten definieren
	v=oTab.ShadowFormat
	with v
		.Color=rgb(128,128,128)
		.Location=com.sun.star.table.ShadowLocation.BOTTOM_RIGHT
		.ShadowWidth=100
	end with
	oTab.ShadowFormat=v
End Sub

Re: Makro für Tabelle funktioniert nicht richtig

Verfasst: Sa, 20.12.2025 19:22
von HaJoBo
Danke !
Die inneren Linien bleiben nun vorhanden.
Wie aber kann ich dem äußeren Tabellerahmen eine Farbe zuordnen (z.B. RGB 0,139,139) ?
Und wie mache ich den Rahhmen doppelt - also 2 Linien ?
Kenne mich leider mit diesem Basic überhaupt nicht aus.

Habe gerade Pitonyak reingesehen - da werde ich wohl alles lernen müssen - macht auch Spaß !
Danke für den Link ! So etwas suchte ich.

Gruß,
Joachim

Re: Makro für Tabelle funktioniert nicht richtig

Verfasst: Sa, 20.12.2025 19:59
von mikeleb
Hallo,
für die Gestaltung der Linien gibt es die Eigenschaften
.OuterLineWidth 'Äußere Linienstärke (in 1/100 mm)
.InnerLineWidth 'Innere Linienstärke (in 1/100 mm)
.LineDistance 'Abstand zwischen innerer und äußerer Line (in 1/100 mm)
.Color 'Linienfarbe
Damit also z. B. für die obere Linie:

Code: Alles auswählen

	x = v.TopLine 	'Struct Obere Rahmenlinie (Kopie)
	x.OuterLineWidth = 50
	x.InnerLineWidth = 50
	x.LineDistance = 10
	x.Color=RGB(0,139,139) 'die FunktionRGB() berechnet den Farbwert zu den RGB-Werten
	v.TopLine = x

Re: Problem gelöst - Makro für Tabelle funktioniert nicht richtig

Verfasst: Sa, 20.12.2025 20:57
von HaJoBo
Wunderbar !!
Jetzt geht ALLES !
Daanke - das war eine große Hilfe !
-----
Immer Tabelle markieren, Rechtsklick auf Tabelle, dort Rahmen wählen, Farbe wählen, Schatten wählen ....puuuuh - und das immer bei mehreren Dateien.....
-----
Jetzt => 1 Klick auf den Makroknopf und fertig ist das Ding !