[GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Longyearbyen »

nein - das war nicht meine Intention!
Es sollte nur die Möglichkeit aufzeigen, dass manche vielleicht zu voreilig sind und meinen, dass da was nicht funktioniert. Es braucht einfach auch Rechenleistung und damit vermutlich auch Zeit.
Lieber 15 Sekunden als Tage weise alles manuell umschreiben

LG Jörg
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von quotsi »

Hallo, ihr Lieben,
Mein Zwischenkommentar war nicht wegen der Zeit (viel oder wenig) entstanden, denn meine kleine Probendatei braucht keine Zeit auf meinem Rechner. Mein Irrung entstand in zwei Beobachtungen:
1. Bei der "leeren" (=standard) Zelle war ich noch dem Glauben verfallen, dass das Makro bereits mich nötigt, eine Formatvorlage zu erzeugen.
2. Beim Versuch mit grün irritierte mich, dass meine eine "markierte" (eigentlich nur ausgewählte) Zelle (die einzige mit Umrandung) blieb. Zwar sprang eine Umrandung zur anderen Grünen, aber ich bemerkte nicht die Gruppenbildung. Erst bei dem letzten Versuch fiel mir auf, dass das grün beider grünen Zellen irgendwie dunkler aussah, als zuvor. Das war dann auch für mich der Hinweis auf die gruppierte Markierung, nur leider sehr dezent und für mich im Kopf zu spät.
Letztendlich hat dann j alles geklappt, wie gewünscht und mich sehr beeindruckend. Hut ab.
Pit
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Helmut_S
*****
Beiträge: 224
Registriert: So, 29.10.2017 11:29

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Helmut_S »

Hallo, @Stephans Makro funktioniert einwandfrei, auch wenn es auf den ersten Klick scheinbar "nichts tut". Ich möchte den TE nur darauf aufmerksam machen, dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das scheint mir wesentlich flexibler, da man damit hinterher bequem auch andere Attribute ändern kann.
Gruß, Helmut
MX-Linux 23 KDE, Linux Mint 21 Cinnamon
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von quotsi »

Helmut_S hat geschrieben: Sa, 28.09.2019 17:12 ... dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das ist eine eingeschränkte Wahrheit, denn man kann die nun markierten unmittelbar einer neuen unbenannten Vorlage zuführen, die man dann erst benennt.
Das hatte ich probiert!
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Longyearbyen »

Helmut_S hat geschrieben: Sa, 28.09.2019 17:12 ....Ich möchte den TE nur darauf aufmerksam machen, dass man die neue HG Farbe nicht nur mit der Gießkanne zuweisen kann, sondern auch gleich über eine vorher erstellte Zellen-Formatvorlage.
Das scheint mir wesentlich flexibler, da man damit hinterher bequem auch andere Attribute ändern kann.
Gruß, Helmut
Das ist ja auch mein Ansinnen. Formatvorlagen existieren nun ganz simpel wie "01 gelb", "02 blau" etc und die mittels des Makros markierten Zellen kann ich nun einfach den Farben der Formatvorlagen zuordnen und dann ggf. auch mal ändern, wenn andere Farben auf dem Plan stehen.
Die aktuellen Web-Briefe existieren sowieso nur noch mit Formatvorlagen-Zellen.

LG, Jörg
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von F3K Total »

Moin,
Ich hätte da inzwischen noch eine Lösung nach meiner oben vorgeschlagenen Idee zu bieten, Beispiel anbei.
Das Makro ermittelt alle im markierten Zellbereich vorkommenden Farben, und legt für jede Farbe ein Zellvorlage an.
Dann grast es alle markierten Zellen erneut ab, liest die Zellhintergrundfarbe aus, löscht sie aus der jeweiligen Zelle und weist ihr die Zellvorlage mit der eben gelöschten Zellhintergrundfarbe zu.
Nachdem man also ein Muster einmal mit diesem Makro bearbeitet hat, kann man jede Farbe über die Zellvorlage in allen betroffenen Zellen mit einem Mal ändern.
Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.

Code: Alles auswählen

Sub replaceBackColorByStyle
 oCellStyles = Thiscomponent.Stylefamilies.CellStyles
 oCellformatranges = thiscomponent.currentselection.Cellformatranges
 ncounter = 0
 for i = 0 to oCellformatranges.count -1
      oNewStyle = THISCOMPONENT.Createinstance("com.sun.star.style.CellStyle")
      oNewStyle.Name = ""+oCellformatranges(i).Cellbackcolor
      if not oCellstyles.hasByName(""+oCellformatranges(i).Cellbackcolor,oNewStyle) then 
          oCellstyles.insertByName(""+oCellformatranges(i).Cellbackcolor,oNewStyle)
          oNewStyle.CellBackColor = oCellformatranges(i).Cellbackcolor
          ncounter = nCounter + 1
      endif
 next i
 oCellrangeaddress = ThisComponent.currentselection.Rangeaddress
 oSheet = ThisComponent.Sheets(oCellrangeaddress.Sheet)
 for j = oCellrangeaddress.startcolumn to oCellrangeaddress.Endcolumn
     for k = oCellrangeaddress.startrow to oCellrangeaddress.Endrow
         oCell = oSheet.getcellbyposition (j,k)
         nColor = oCell.Cellbackcolor
         oCell.Cellbackcolor = -1
         oCell.CellStyle = ""+nColor
    next k
 next j
 msgbox ("Es wurden "+ncounter+" Zellvorlagen erstellt und auf die ausgewählten Zellen angewendet",64,"Fertig")
End Sub

Gruß R
Dateianhänge
InsertCellstyles.ods
(10.47 KiB) 120-mal heruntergeladen
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Longyearbyen »

F3K Total hat geschrieben: Sa, 28.09.2019 19:04 Moin,
Ich hätte da inzwischen noch eine Lösung nach meiner oben vorgeschlagenen Idee zu bieten, Beispiel anbei.
Das Makro ermittelt alle im markierten Zellbereich vorkommenden Farben, und legt für jede Farbe ein Zellvorlage an.
Dann grast es alle markierten Zellen erneut ab, liest die Zellhintergrundfarbe aus, löscht sie aus der jeweiligen Zelle und weist ihr die Zellvorlage mit der eben gelöschten Zellhintergrundfarbe zu.
Nachdem man also ein Muster einmal mit diesem Makro bearbeitet hat, kann man jede Farbe über die Zellvorlage in allen betroffenen Zellen mit einem Mal ändern.
Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.


Gruß R
....Fein :-) Dann brauche ich nur noch einen Generator, der mir automatisch nach historischer Vorlage Webbriefe erstellt...
nein, Scherz beiseite, eine fantastische Idee! Ich brauche sie hier nicht mehr, da ich nun alle Briefe "konvertieren" konnte.
Den Code habe ich mir trotzdem abgesichert, allein schon um zu studieren, was dabei gerade abläuft.
Vlt probiere ich es auch selbst mal mit dem programmieren...

Danke Euch allen fürs Kopfzerbrechen und ich hoffe, dass noch weitere User diese spezielle Sache nutzen können.
LG, Jörg
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Stephan »

hier mit Fortschrittsanzeige:

fortschritt.gif
fortschritt.gif (2.77 KiB) 3689 mal betrachtet

Code: Alles auswählen

Dim wv_fortschritt_model As Object
Dim wv_fortschritt As Object

Sub Main
	Dim az As Long
	Dim bz As Long
	
	If ThisComponent.getCurrentSElection.supportsService("com.sun.star.sheet.SheetCell") Then
			akt_farbe = Thiscomponent.getCurrentSelection.CellBackColor
		Else
			Msgbox "Bitte nur EINE Zelle markieren."
	End If
	
	blatt = ThisComponent.CurrentController.ActiveSheet
	cur = blatt.CreateCursor
	cur.GotoEndOfUsedArea(True)
	letzte_zeile = cur.RangeAddress.EndRow
	letzte_spalte = Cur.RangeAddress.EndColumn
	
	az = (letzte_zeile+1)*(letzte_spalte+1)
	bz = 0
	
	bereiche = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
	
	'Fortschrittsdialog
	fortschrittsanzeige
		
	For i = 0 to letzte_zeile
	For j = 0 To letzte_spalte
		If blatt.getCellByPosition(j, i).CellBackColor = akt_farbe Then
			bereiche.addRangeAddress(blatt.getCellByPosition(j, i).RangeAddress, False)
		End If
		bz = bz + 1
		wv_fortschritt.Model.getByName("warten1").Label = bz & " von " & az & " Zellen geprüft." 
	Next j
	Next i
	
	ThisComponent.CurrentController.select(bereiche)
	
	wv_fortschritt.setVisible(False)
	
	Msgbox "Fertig."

End Sub

Sub fortschrittsanzeige()
	wv_fortschritt_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
	wv_fortschritt_model.setPropertyValue("Width",  150)
	wv_fortschritt_model.setPropertyValue("Height", 20)
	wv_fortschritt_model.SetPropertyValue("Title","Bitte etwas Geduld")
	
	oMod_warten = wv_fortschritt_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
	With oMod_warten
		.setPropertyValue("Name","warten1")
		.setPropertyValue("PositionX",5) '192
		.setPropertyValue("PositionY",5) 
		.setPropertyValue("Width",140)
		.setPropertyValue("Height",13)
		.setPropertyValue("Label","Bitte etwas Geduld...")
	End With
	wv_fortschritt_model.insertByName("warten1", oMod_warten)
	wv_fortschritt = CreateUnoService("com.sun.star.awt.UnoControlDialog")
	wv_fortschritt.setModel(wv_fortschritt_model)
	
	oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
	wv_fortschritt.createPeer(oWin2, null)
	wv_fortschritt.setVisible(True)
End Sub

Gruß
Stephan
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von quotsi »

F3K Total hat geschrieben: Sa, 28.09.2019 19:04 Zelle anklicken; F11 drücken->aktive Zellvorlage ist selektiert, Rechtsklick->Ändern...->Hintergrund...neue Farbe einstellen, fertig.
Leider nicht fehlerfrei.
Auf meine o. angegebene Beispieldatei angewandt und das erste oder zweite grüne Feld angewandt:
Es wird nur dieses eine Feld mit einer neuen (mit kuriosem Zahlennamen versehenen) Formatvorlage versehen, die anderen grünen nicht. Auch bleiben die beiden anderen Farben mit Formatvorlage unangetastet.
Entweder werden beide Makros kombiniert oder die Nutzung ist wertlos.

Pit
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von F3K Total »

quotsi hat geschrieben: So, 29.09.2019 15:49 Leider nicht fehlerfrei.
Klasse Pit,

"Herr Lehrer, ich weiß was, im Keller brennt Licht" :roll:

Du hast in deiner Datei schon Formatvorlagen angewendet. Eine Zelle die per Formatvorlage formatiert ist, hat keine "harte Hintergrundfarbe", daher kann mein Makro auch keine Farbe auslesen um dann eine neu kreierte Zellvorlage zuzuweisen.
Versuch es mit einer Datei, in der keine Zelle per Formatvorlage formatiert sind, wie es Longyearbyen geschrieben hat, z.B. meiner Beispieldatei.
Das Makro macht GENAU das was es soll.
PS: der kryptische Vorlagenname entspricht der Farbe als Longinteger-Zahl
R
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von quotsi »

F3K Total hat geschrieben: So, 29.09.2019 18:51 Du hast in deiner Datei schon Formatvorlagen angewendet. Eine Zelle die per Formatvorlage formatiert ist, hat keine "harte Hintergrundfarbe", daher kann mein Makro auch keine Farbe auslesen um dann eine neu kreierte Zellvorlage zuzuweisen.
Ich weiß Deine Fähigkeiten zu schätzen, brauchst mich also nicht lächerlich zu machen.
Ich möchte bemerken, dass in meiner Beispieldatei, als ich sie hochludt, zwar 2 Farben mit Formatvorlagen drin waren, nämlich rot und gelb, nicht aber die grüne!
Nur deshalb war es mir möglich das erste hier im thread vorgestellte Makro auszuprobieren.
Da ich nur ein kleines Licht bin ohne große Kenntnisse, dass nur Klarheit haben will, werde ich jetzt alles nochmal probieren, sowohl was Du behauptest und auch noch mal was ich behauptete.
Wenn nämlich Dein Makro ausschliesslich funktioniert, wenn gar keine Farben mit Formatvorlagen drin sind, dann muß das vorher als Bedingung bekannt sein. Ich selbst hatte vermutet, daß das egal wäre, denn es ging ja nur um Erkennung hart formatierter.

NACHTRAG: Ich sehe, meine Beispieldatei ist im thread verschwunden???
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Stephan »

NACHTRAG: Ich sehe, meine Beispieldatei ist im thread verschwunden???
ist hier nicht die Datei:
viewtopic.php?f=2&t=73401#p285593

zumindest bei mir klappt auch der Download.


Gruß
Stephan
quotsi
******
Beiträge: 693
Registriert: Do, 14.11.2013 10:04

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von quotsi »

@ F3K Total
Also meine Beispieldatei mit deinem Makro:
calc - Hintergrundfrabe zu Formatvorlage.ods
Beispiel mit zwei Formatvorlagen und einer dritten hartformatierten Farbe grün
(10.43 KiB) 95-mal heruntergeladen
1. A1 (=leer) fokussiert, Makro: Es resultiert:
eine neue Vorlage "-1". Eine leere Zelle mit -1-Vorlage formatiert : keine Farbe,
die grüne Farbe ist noch ohne Formatzuweisung so wie zuvor
2. C3 (=grün) fokussiert : Es entsteht eine neuer Vorlage "10092441". Eine leere Zelle damit formatiert: sie wird grün wie die anderen,
aber jede andere grüne außer C3 haben wie zuvor die Standardvorlage.
3. D8 (=die letzte grüne) fokussiert: Dasselbe Resultat: Nur diese Zelle erhält eine neue Formatvorlage mit der richtigen Eigenschaft, die anderen grünen nicht.

Die Beispieldatei ohne jede Formatvorlage für Hintergrundfarbe:
4. A1 fokussiert: Dasselbe wie bei 1.
5. Die gesamte Tabelle markiert: Kommt nicht zum Abschluß! Man kann merhfach speichern... , aber es werden tatsächlich 4 Formatvorlagen erzeugt, aber ich erlebe nicht, dass die farbigen Zellen eine erhalten, sondern sie bleiben bei Mouse-over immer auf Standard.
Schließlich bekommt jeweils eine Zuweisung.
calc - Hintergrundfrabe zu Formatvorlage 2-Resultat.ods
Resultat nach Markierung der gesamten Tabelle und Makro
(10.61 KiB) 99-mal heruntergeladen
Pit
win11 - Avira - LO 7.5.8.2 (X86_64) - AOO 4.1.14
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von F3K Total »

Hallo Pit,
habe es gerade mit meiner Datei unter LO 6.2.7, und AOO 4.1.7, Windows 7 versucht, Ergebnis anbei.
Und auch bei deiner Datei wird alle Zellen, denen eine "harte Farbe" von Hand zugeordnet wurde, die richtige Zellvorlage zugeordnet.
Kann dein Ergebnis hier also nicht nachstellen.
Gruß R
PS: Beim Versuch mit der noch nicht stabilen Version LO 6.3.1 kommt es bei mir zum Zittern der Schaltfläche, das Ergebnis ist aber auch in Ordnung.
Anbei noch deine Datei, bei der ich in die mit Zellvorlagen formatierten Zellen harte Farben gesetzt habe, bevor ich das Makro laufen lies.
Dateianhänge
calc - Hintergrundfrabe zu Formatvorlage.ods
(10.34 KiB) 101-mal heruntergeladen
Cellstyles_inserted.ods
(12.31 KiB) 104-mal heruntergeladen
Longyearbyen
**
Beiträge: 21
Registriert: Mi, 10.02.2016 17:35

Re: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

Beitrag von Longyearbyen »

Moin nochmals in die Runde,

@F3K Total
da muss ich doch nochmal nachfragen... wieso verwendest Du statt zum Beispiel Gelb Grün oder Blau als Vormatvorlage stets ellenlage Zahlen? Vermutlich bin ich hier wieder zu blöd und es sind vielleicht die (Hexa?)(CMYK)(RGB)(RAL)-codes für die Farben, die Du in den Zellen verwendet hast.
Auch sonst wäre es interessant zu wissen, wo man diese Codes angezeigt bekommt.

LG, Jörg
Antworten