Bedingte Formatierung

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

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Bedingte Formatierung

Beitrag von erikafuchs »

Ihr Lieben,
noch drei Probleme:
1. kann man per Makro eine bedingte Formatierung erstellen? Mein Makro erzeugt neue Calc Dateien. Ich möchte erreichen, dass sich Zellen grün färben wenn ein Wert eingegeben wird.
2. Für diese Grünfärbung muss ich auf meinem Computer ja eine Formatvorlage erstellen. Die obengenannten Dateien muss ich aber verteilen. Wenn die Empfänger diese Formatvorlage nicht haben, geht das nicht ... oder doch?
3. Meine Datenempfänger nutzen dann wahrscheinlich auch noch Excel ... dann geht das gar nicht mehr... oder?
Viele Grüße
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bedingte Formatierung

Beitrag von Karolus »

Hallo
1. Ja, sieh nach bei Dannenhöfer.
2. Eine Formatvorlage ist Bestandteil der Datei !
3. Ausprobieren

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Lieber Carolus,
vielen dank!
Karolus hat geschrieben: Ja, sieh nach bei Dannenhöfer.
??? Wer ?
Grüße
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bedingte Formatierung

Beitrag von Karolus »

LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Bedingte Formatierung

Beitrag von turtle47 »

Hallo,
Karolus hat geschrieben:Eine Formatvorlage ist Bestandteil der Datei !
Pit erzeugt eine neue Datei in der er die BF erstellen möchte.
erikafuchs hat geschrieben: Mein Makro erzeugt neue Calc Dateien. Ich möchte erreichen, dass sich Zellen grün färben wenn ein Wert eingegeben wird.

Beigfügt mal ein Code dessen Ursprung von Karolus ist. :wink:

Der Code erzeugt zunächst eine Pseudozelle mit Wert und Hintergrundfarbe aus der dann eine Zellvorlage generiert wird.
Danach wir die BF den vorgegebenen Zellbereichen zugewiesen. Anschliessend wird die Pseudozelle zurückgesetzt.

Code: Alles auswählen

Global iTab as Integer
Global oDocument as object
Global oCell as object
Global oPseudoCell as String
Sub bedingteFormatierung
	oDocument = ThisComponent
	iTab = 0 'Tabellenblattindex
	oPseudoCell = "E5"
	osheet = oDocument.sheets(iTab)
	oCell = osheet.getcellRangebyName(oPseudoCell)
	oCell.value = 6
	oCell.cellbackcolor = 4057917
	oDocument.CurrentController.Select(oCell)
	neuVorlageausSelektion(oCell.value)
	oDocument.CurrentController.Select(-1)
	dim ibereich as variant
	ibereich() = array("A1:A3","C1:C3")'Zellbereiche für BF
	for i = 0 to ubound(ibereich())	
	bereich = oDocument.sheets(iTab).getcellrangebyname(ibereich(i)).getrangeaddress
	formatierung(bereich,iTab)
	next i
	oCell.clearContents(255)'Reset Pseudozelle
	msgbox "Die Kürzel sind übertragen und die bedingte Formatierung ist eingerichtet. ", 68, " Bestätigung"
end sub

function formatierung(bereich,tabindex)
dim BedingtFormat as Object
	with bereich
	erstSp = .startColumn
	erstzei = .startRow
	endSpa = .EndColumn
	endZei = .EndRow
	end with
	dim Zellformat(3) as New com.sun.star.beans.PropertyValue
	Zellformat(0).Name = "Operator"
	Zellformat(0).value = com.sun.star.sheet.ConditionOperator.EQUAL
	Zellformat(1).Name = "Formula1"
	Zellformat(2).Name = "StyleName"
	for sp = erstSp to endSpa
	for ze = erstzei to endZei
	BedingtFormat = oDocument.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat
	ocell2 = thisComponent.sheets(tabindex).getcellRangebyName(oPseudoCell).string
	Zellformat(1).value =  ocell2 
	Zellformat(2).value = ocell2
	BedingtFormat.addNew(Zellformat())
	thiscomponent.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
	next ze
	next sp
end function

function neuVorlageausSelektion(vorlagenname as string)
	dim document   as object
	dim dispatcher as object
	document   = oDocument.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(1) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "Param"
	args1(0).Value = vorlagenname
	args1(1).Name = "Family"
	args1(1).Value = 2
	dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1())
end function
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Lieber Karo,
Karolus hat geschrieben:Hallo
Wer ?
http://www.dannenhoefer.de/faqstarbasic/index.html

Gruß Karo
wieder was dazugelernt!

Lieber Jürgen
danke, da muss ich mich jetzt erstmal durcharbeiten.
Grüße von
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bedingte Formatierung

Beitrag von Karolus »

Hallo
Beigfügt mal ein Code dessen Ursprung von Karolus ist. :wink:
Oh - den Senf hab ich mal zusammengestopft - hoffentlich hab ich mich gebessert.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Lieber Jürgen, lieber Carolus,
ich hoffe Ihr beobachtet diese Frage noch. Vielen Dank erstmal. Ich habe zwar keine Ahnung warum man zuerst eine Pseudozelle erstellen muss und diese dann wieder löschen ... aber es funktioniert schon ... ansatzweise. Leider konnte ich den Code noch nicht so anpassen dass er in meinem Code macht was er soll. Problematisch ist

1. ich weiss nicht was diese beiden Zeilen bewirken:
oDocument.CurrentController.Select(oCell)
...
oDocument.CurrentController.Select(-1)
2. ich müsste den Bereich als Position angeben und nicht als Name, das gelingt mir noch nicht zufriedenstellend:
ibereich() = array("A1:A3","C1:C3")'Zellbereiche für BF
for i = 0 to ubound(ibereich())
bereich = oDocument.sheets(iTab).getcellrangebyname(ibereich(i)).getrangeaddress
formatierung(bereich,iTab)
next i
....
with bereich
erstSp = .startColumn
erstzei = .startRow
endSpa = .EndColumn
endZei = .EndRow
end with
dim Zellformat(3) as New com.sun.star.beans.PropertyValue
Zellformat(0).Name = "Operator"
Zellformat(0).value = com.sun.star.sheet.ConditionOperator.EQUAL
Zellformat(1).Name = "Formula1"
Zellformat(2).Name = "StyleName"
for sp = erstSp to endSpa
for ze = erstzei to endZei
BedingtFormat = oDocument.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat
ocell2 = thisComponent.sheets(tabindex).getcellRangebyName(oPseudoCell).string
Zellformat(1).value = ocell2
Zellformat(2).value = ocell2
BedingtFormat.addNew(Zellformat())
thiscomponent.sheets(tabindex).getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
next ze
next sp
könnte man nicht in der roten Zeile den gewünschten Bereich angeben und die Hälfte vom Rest weglassen? (Mir gelingt es allerdings nicht ... ich bin aber blutiger Anfänger)

3. Hier müsste man doch auch einen anderen Wert eingeben können:
oPseudoCell = "E5"
wenn ich hier z.B. "AA0" eingebe, klappt das nicht.

4. Warum ist das eine Bereich und nicht eine Zelle:
oCell = osheet.getcellRangebyName(oPseudoCell)
?

Es wäre schön wenn Ihr mir da weiterhelfen könntet!
Grüße
Pit
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Falls sich das noch jemand ansieht:
Jetzt klappt alles. Ich habe den Code verkürzt:

Code: Alles auswählen

Sub bedingteFormatierung
   dim BedingtFormat as Object
   dim Zellformat(3) as New com.sun.star.beans.PropertyValue
   oPseudoCell = "K2"
   oCell = outSheet.getcellRangebyName(oPseudoCell)
   oCell.value = 1
   oCell.cellbackcolor = 4057917
   LDat.CurrentController.Select(oCell)
   neuVorlageausSelektion(oCell.value)
   LDat.CurrentController.Select(-1)
   Zellformat(0).Name = "Operator"
   Zellformat(0).value = com.sun.star.sheet.ConditionOperator.GREATER_EQUAL
   Zellformat(1).Name = "Formula1"
   Zellformat(2).Name = "StyleName"
   for sp =q to q
      for ze = startzeile to outzeile
         BedingtFormat = outSheet.getcellbyPosition(sp,ze).ConditionalFormat
         ocell2 = outSheet.getcellRangebyName(oPseudoCell).string
         Zellformat(1).value =  ocell2
         Zellformat(2).value = ocell2
         BedingtFormat.addNew(Zellformat())
         outSheet.getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
      next ze
   next sp
   oCell.clearContents(255)'Reset Pseudozelle
end sub

function neuVorlageausSelektion(vorlagenname as string)
   dim document   as object
   dim dispatcher as object
   document=zielFrame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   dim args1(1) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "Param"
   args1(0).Value = vorlagenname
   args1(1).Name = "Family"
   args1(1).Value = 2
   dispatcher.executeDispatch(document, ".uno:StyleNewByExample", "", 0, args1())
end function
... ich habe allerdings jetzt weiterhin keine Ahnung, warum ich die Schleife

Code: Alles auswählen

     
   for sp =q to q
      ...
   next sp
nicht weglassen kann.
Nochmals Dank
Pit
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Bedingte Formatierung

Beitrag von Karolus »

Hallo
Und ich hab keine Ahnung wieso du...

Code: Alles auswählen

for sp =q to q
...überhaupt benutzt ? - von mir hast du das nicht.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Lieber Caro,
in deinem Code heißt es:

Code: Alles auswählen

   for sp = erstSp to endSpa
...
   next sp
... die Schleife brauche ich eigentlich nicht, da ich nur eine Spalte formatiere. Ich kann sie aber nicht weglassen, sonst läuft es nicht....?
Grüße
Pit
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Bedingte Formatierung

Beitrag von DPunch »

Aloha
erikafuchs hat geschrieben:... die Schleife brauche ich eigentlich nicht, da ich nur eine Spalte formatiere. Ich kann sie aber nicht weglassen, sonst läuft es nicht....?
Wenn Du den von Dir geposteten Code nicht veränderst abgesehen vom Löschen der äussersten Schleife, wird wohl das weitere Verwenden der Laufvariablen das Problem sein:

Code: Alles auswählen

      for ze = startzeile to outzeile
         BedingtFormat = outSheet.getcellbyPosition(sp,ze).ConditionalFormat
(...)
         outSheet.getcellbyPosition(sp,ze).ConditionalFormat = BedingtFormat
      next ze
Ersetze einfach die "sp"s im Code durch die von Dir gewünschte Spalte, dann kannst Du die Schleife auch weglassen.
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Bedingte Formatierung

Beitrag von erikafuchs »

Lieber DPunch,
du hast recht. Eigentlich wollte ich das Problem bei den ungelösten Rätseln ablegen. Ich habe meinen Code aber jetzt doch nochmal durchforstet und musste feststellen, dass ich ein "sp" nicht ersetzt habe. Auweh.
Dank und Grüße
Pit
Antworten