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

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

HaJoBo
Beiträge: 3
Registriert: Fr, 19.12.2025 20:28

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

Beitrag 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
mikeleb
*******
Beiträge: 1441
Registriert: Fr, 09.12.2011 16:50

Re: Makro für Tabelle funktioniert nicht richtig

Beitrag 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
Gruß,
mikeleb
HaJoBo
Beiträge: 3
Registriert: Fr, 19.12.2025 20:28

Re: Makro für Tabelle funktioniert nicht richtig

Beitrag 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
mikeleb
*******
Beiträge: 1441
Registriert: Fr, 09.12.2011 16:50

Re: Makro für Tabelle funktioniert nicht richtig

Beitrag 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
Gruß,
mikeleb
HaJoBo
Beiträge: 3
Registriert: Fr, 19.12.2025 20:28

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

Beitrag 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 !
Antworten