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

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [GELÖST] Alle Zellen einer bestimmten Farbe automatisch markieren

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

von quotsi » Di, 01.10.2019 18:30

Ja, jetzt ist das Makro überzeugend und schnell !
Glückwunsch für Dich und alle Musterkünstler.
Wenn ich doch auch so ein Talent hätte...

Pit

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

von F3K Total » Di, 01.10.2019 17:53

Moin nochmal,
ich habe das Makro verbessert, es ist schneller, vergibt nun Vorlagennamen àla RGB(234,56,72) und farbleere Zellen bekommen nicht mehr die Vorlage -1.
CS.PNG
CS.PNG (12.33 KiB) 2299 mal betrachtet
Gruß R
Dateianhänge
InsertCellstyles2.ods
(10.54 KiB) 109-mal heruntergeladen

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

von F3K Total » Di, 01.10.2019 16:59

Moin zusammen,
quotsi hat geschrieben: Di, 01.10.2019 09:32 - Markiere ich die ganze Tabelle1 ...
Tja, das steht in meiner Beispieldatei auch nicht drin, man soll den relevaten Bereich markieren und das Makro dann starten.
Man kann jeden Computer überlasten!
Eine ganze Tabelle hat 1048576 Zeilen und 1024 Spalten also 1073741824 = Einemilliardedreiundsiebzigmillionensiebenhunderteinundvierzigtausendachthundertvierundzwanzig Zellen!
Das ist viel, sehr viel! Mein langsamer Rechner benötigt für 280 Zellen 1,6 Sekunden, für das Durchlaufen aller Zellen eines Tabellenblattes etwa 1704 Stunden entsprechend 71Tage.
quotsi hat geschrieben: Di, 01.10.2019 09:32 Für mich ist noch nicht verständlich, warum die Farbe -1
Weil ich zu faul war diesen Sonderfall, Zelle hat keine Hintergrundfarbe, gesondert zu betrachten, da die Vorlage -1 ja nicht weh tut.
Aber du kannst das gerne nachholen, wenn dir so viel daran liegt.
Longyearbyen hat geschrieben: Di, 01.10.2019 00:11 wieso verwendest Du statt zum Beispiel Gelb Grün oder Blau als Vormatvorlage stets ellenlage Zahlen
Es sind die Longinteger-Codes der jeweiligen Farbe, umrechnen kannst du sie mit folgender Formel:
Z = R*256^2 + G*256 + B
Beispiel:
RGB(255,34,128) = 255*256*256+34*256+128 = 16720512
Zurückrechnen:
16720512/(256*256) = 255,134765625 -> R = 255
16720512-(255*256*256) = 8832 -> 8832/256 = 34,4 -> G =34
8832-(256*34) = 128 -> B = 128

Gruß R

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

von quotsi » Di, 01.10.2019 09:43

@ Longyearbyen

Den Wert der Farbe kannst auf zwei Wegen erkennen:
1. Du editierst die neue Vorlage ->Hintergrund...
oder
2. Du formatierst eine leere Zellen mit einer der neu entstandenen Formatvorlagen undgehst über Format-> Zelle

Ich würde die unerklärbare Zahl nach eigenen Wünschen umbenennen.

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

von quotsi » Di, 01.10.2019 09:32

@F3K Total

Mein neuer Zwischenbericht:
- Markiere ich einen kleinen begrenzten Bereich, dann arbeitet das Makro (von F3K Total) korrekt !
- Markiere ich die ganze Tabelle1 (das sind nach Status-Leiste mehr als 1 Mio Zellen), dann wird das Makro offenbar nach der namentlichen Erzeugung von 4 Formatvorlagen (-1 und drei für meine Beispiel-Farben) nicht mehr fetig. Ich habe bereits mehr als 1/2 h gewartet (mein Compi ist mit einem i7 ausgstattet!). Es kommt nicht die erwünschte Message-Box
Speichert man, geht die rote Markierung auf dem Speicherknopf nie aus, also darf man beliebig oft speichern. Schließt man das Programm, will es speichern, was ich vollziehe. Lade ich diese Datei erneut, dann sei LO abgestürzt und später muß die Datei erst wiederhergestellt werden...

Für mich ist noch nicht verständlich, warum die Farbe -1 als Formatvorlage angelegt wird. Sie ist doch offenbar mit der leeren Zelle identisch, also mit Standard. Warum wird sie nicht übergangen?

Pit

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

von Longyearbyen » Di, 01.10.2019 00:11

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

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

von F3K Total » Mo, 30.09.2019 19:02

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

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

von quotsi » Mo, 30.09.2019 18:50

@ 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

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

von Stephan » Mo, 30.09.2019 17:51

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

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

von quotsi » Mo, 30.09.2019 17:35

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???

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

von F3K Total » So, 29.09.2019 18:51

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

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

von quotsi » So, 29.09.2019 15:49

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

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

von Stephan » So, 29.09.2019 11:40

hier mit Fortschrittsanzeige:

fortschritt.gif
fortschritt.gif (2.77 KiB) 3720 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

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

von Longyearbyen » Sa, 28.09.2019 19:31

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

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

von F3K Total » 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.

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

Nach oben