🍀 Bitte helfen Sie dabei, unser LibreOffice Forum zu erhalten! 🍀
❤️ Spendenkampagne für das neue Jahr 2026 startet jetzt. ❤️
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig ihr Wissen teilen.<<
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen Dank!

❤️ DANKE >> << DANKE ❤️

🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗


Formatierung eines CellRange auf ein anderes CellRange übertragen

Alles zur Programmierung im LibreOffice.
Cepheus
Beiträge: 10
Registriert: Mo 12. Mai 2025, 21:51

Re: Formatierung eines CellRange auf ein anderes CellRange übertragen

Beitrag von Cepheus » Fr 23. Jan 2026, 15:04

Besten Dank, mikele!
Jawohl, das funktioniert jetzt. Hier wiederhole ich deine Empfehlung als Ganzes:
Dim oRanges
oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.CurrentController.Select(oRanges)
dispatcher.executeDispatch(document, ".uno:SetInputMode", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Cancel", "", 0, Array())
Gruß,
Cepheus

mikele
* LO-Experte *
Beiträge: 2003
Registriert: Mo 1. Aug 2011, 20:51

Re: Formatierung eines CellRange auf ein anderes CellRange übertragen

Beitrag von mikele » Sa 24. Jan 2026, 17:15

Hallo,
ich habe mal etwas weiter geknobelt, um das Problem per API (ohne Dispatcher zu lösen).
Dazu ist es wohl notwendig alle relevanten Eigenschaften einzeln zu übertragen.

Code: Alles auswählen

Sub Main
	'Eigenschaften der Zellen, die übertragen werden sollen, es gibt noch mehr ...
	eigenschaften=Array("CellStyle", "CellBackColor", "IsCellBackgroundTransparent", "HoriJustify", "VertJustify", "IsTextWrapped",_
	"ParaIndent", "Orientation", "RotateAngle", "RotateReference", "TableBorder", "TopBorder", "BottomBorder",_
	"LeftBorder", "RightBorder", "NumberFormat", "ShadowFormat", "CellProtection", "DiagonalTLBR", "DiagonalBLTR",_
	"TableBorder2", "TopBorder2", "BottomBorder2", "LeftBorder2", "RightBorder2", "DiagonalTLBR2", "DiagonalBLTR2",_
	"CharColor", "CharFontName", "CharHeight", "CharPosture", "CharWeight")
	'Zugriff auf Dokument
	oDoc=ThisComponent
	'Zugriff auf 1. Tabelle
	oTab=oDoc.Sheets(0)
	'der einzeilige Quellbereich
	quelle=oTab.getCellrangeByName("C3:I3")
	spalten=quelle.Columns.Count
	'der mehrzeilige Zielbereich gleicher Breite
	ziel=oTab.getCellrangeByName("C7:I10")
	zeilen=ziel.Rows.Count
	'Durchlauf durch alle Spalten des Zielbereichs
	for spalte=0 to n-1
		'Erfassen und Übertragen der bedingten Formatierung
		bedformat=quelle.getCellByPosition(spalte,0).ConditionalFormat
		ziel.getCellRangeByPosition(spalte,0,spalte,zeilen-1).ConditionalFormat=bedformat
		'Erfassen und Übertragen der weiteren Eigenschaften
		for i=0 to ubound(eigenschaften)
			tmp=quelle.getCellByPosition(spalte,0).getPropertyValue(eigenschaften(i))
			ziel.getCellRangeByPosition(spalte,0,spalte,zeilen-1).setPropertyValue(eigenschaften(i),tmp)
		next
	next
End Sub
Gruß,
mikele

Cepheus
Beiträge: 10
Registriert: Mo 12. Mai 2025, 21:51

Re: Formatierung eines CellRange auf ein anderes CellRange übertragen

Beitrag von Cepheus » So 25. Jan 2026, 11:19

Hallo, mikele,
zunächst wieder einmal danke für deine Lösungssuche.
Ich habe deinen Code in meinem mit Option Explicit versehenen Modul adaptiert. Aber die Codezeile

ziel.getCellRangeByPosition(spalte,0,spalte,zeilen-1).setPropertyValue(eigenschaften(i),tmp)

erzeugt eine IllegalArgumentException. Was kann ich tun?
Ich schicke dir den adaptierten Code. Die zugehörige Testdatei hast du schon bekommen.
Gruß,
Cepheus

mikele
* LO-Experte *
Beiträge: 2003
Registriert: Mo 1. Aug 2011, 20:51

Re: Formatierung eines CellRange auf ein anderes CellRange übertragen

Beitrag von mikele » So 25. Jan 2026, 14:17

Hallo,
es war auch noch ein grober Fehler (das kommt davon, wenn man im Nachhinein die Variablen ändert :oops: )
Nun mit option explicit:

Code: Alles auswählen

option explicit

Sub Main
	dim eigenschaften, bedformat, tmp
	dim odoc as object, otab as object, quelle as object, ziel as object
	dim spalten as integer, zeilen as integer, i as integer, spalte as integer
	'Eigenschaften der Zellen, die übertragen werden sollen, es gibt noch mehr ...
	eigenschaften=Array("CellStyle", "CellBackColor", "IsCellBackgroundTransparent", "HoriJustify", "VertJustify", "IsTextWrapped",_
	"ParaIndent", "Orientation", "RotateAngle", "RotateReference", "TableBorder", "TopBorder", "BottomBorder",_
	"LeftBorder", "RightBorder", "NumberFormat", "ShadowFormat", "CellProtection", "DiagonalTLBR", "DiagonalBLTR",_
	"TableBorder2", "TopBorder2", "BottomBorder2", "LeftBorder2", "RightBorder2", "DiagonalTLBR2", "DiagonalBLTR2",_
	"CharColor", "CharFontName", "CharHeight", "CharPosture", "CharWeight")
	'Zugriff auf Dokument
	oDoc=ThisComponent
	'Zugriff auf 1. Tabelle
	oTab=oDoc.Sheets(0)
	'der einzeilige Quellbereich
	quelle=oTab.getCellrangeByName("C3:I3")
	spalten=quelle.Columns.Count
	'der mehrzeilige Zielbereich gleicher Breite
	ziel=oTab.getCellrangeByName("C7:I10")
	zeilen=ziel.Rows.Count
	'Durchlauf durch alle Spalten des Zielbereichs
	for spalte=0 to spalten-1
		'Erfassen und Übertragen der bedingten Formatierung
		bedformat=quelle.getCellByPosition(spalte,0).ConditionalFormat
		ziel.getCellRangeByPosition(spalte,0,spalte,zeilen-1).ConditionalFormat=bedformat
		'Erfassen und Übertragen der weiteren Eigenschaften
		for i=0 to ubound(eigenschaften)
			msgbox eigenschaften(i)
			tmp=quelle.getCellByPosition(spalte,0).getPropertyValue(eigenschaften(i))
			ziel.getCellRangeByPosition(spalte,0,spalte,zeilen-1).setPropertyValue(eigenschaften(i),tmp)
		next
	next
End Sub
Gruß,
mikele

Cepheus
Beiträge: 10
Registriert: Mo 12. Mai 2025, 21:51

Re: Formatierung eines CellRange auf ein anderes CellRange übertragen

Beitrag von Cepheus » So 25. Jan 2026, 14:39

Hallo, mikele!
Super, jetzt funktioniert es also auch per API.

Ja, das Thema hat den großen Unterschied zwischen einem Experten und einem grünen Anfänger aufgezeigt! (Der Letztere bin nämlich ich.) Oh, ich könnte eine Menge Sachen von dir lernen!

Ich könnte dir nicht genug danken,
Gruß,
Cepheus


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten