Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Zellen färben in Excel über Python
Seite 1   [1 2]   2 Seiten
Autor
Schule Zellen färben in Excel über Python
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Themenstart: 2021-06-12

\sourceon Python \numberson import openpyxl from openpyxl import Workbook from openpyxl.styles import Color, PatternFill, Font, Border from openpyxl.styles import colors from openpyxl.cell import Cell y1=[] y2=[] x=0 wb = openpyxl.Workbook() ws = wb.active redFill = PatternFill(start_color="FFFF0000", end_color="FFFF0000", fill_type="solid") taublauFill = PatternFill(start_color="0099CCFF", end_color="0099CCFF", fill_type="solid") ws["A1"].fill = redFill for x in range(1,210,2): y1.append(x) if x%5==0: y2.append(1) else: y2.append("") ws.append(["3"]+y1) ws.append((["5"].fill = taublauFill)+y2) wb.save("/Desktop/ProjLeg/Exceldat/Färbeübung(210).xlsx") print(y1) print(y2) \sourceoff Die Zeile 20 funktioniert. In Zeile 29 wollte ich jede 5 zelle färben, es geht aber nicht. in y 2 sind die Daten drinne, in welche Zelle eine 1 kommt, also die ist durch 5 teilbar.... Das stimmt noch nicht, weil in die Anführungszeichen die Zellenadresse muss... Hat jemand einen Vorschlag?


   Profil
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 468
Wohnort: Deutschland
  Beitrag No.1, eingetragen 2021-06-12

Hallo Bekell, ist yellowFill definiert?


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.2, vom Themenstarter, eingetragen 2021-06-12

\quoteon(2021-06-12 21:34 - Scynja in Beitrag No. 1) ..ist yellowFill definiert? \quoteoff Hallo Scynia, ya, inzwischen ja, aber ich versteh die ganze Grammatik nicht. Ist "redFill" denn eine Funktion? Dann fehlt aber das "def". Warum steht die Zellbezeichnung in Anführungszeichen? Man kann z.B. nicht die Excel-typische Bereichsdefinition eingeben: A1:A7, dann sagt er: \sourceon Python \numberson ws["C2:C4"].fill = redFill AttributeError: 'tuple' object has no attribute 'fill' \sourceoff


   Profil
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 468
Wohnort: Deutschland
  Beitrag No.3, eingetragen 2021-06-12

redFill ist ein Objekt der Klasse PatternFill. Die Klasse kannst du dir hier durchlesen: https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/styles/fills.html#PatternFill Zeile 14 wird der Konstruktor mit den Parametern start_color="FFFF0000", end_color="FFFF0000" und fill_type="solid" aufgerufen. Für die anderen Parameter werden Default-Werte verwendet. \sourceon Python def __init__(self, patternType=None, fgColor=Color(), bgColor=Color(), fill_type=None, start_color=None, end_color=None): \sourceoff


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.4, vom Themenstarter, eingetragen 2021-06-13

Danke, Scynia, das ist leider ein bischen zu hoch für hoch momentan... Kannst Du Dir vorstellen, wie man das macht, dass er y2, da packt er in jedes 5. Kästchen eine 1, daß diese 1 auch noch mit hintergrundgefärbt wird, meinetwegen Rosa?


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.5, eingetragen 2021-06-13

Eine allgemeine Lösung für so ein Problem: 1. Man schreibe eine Funktion/Methode, die ein Kästchen so modifiziert, wie man es will. 2. Man schreibe eine Funktion, die diejenige Kästchenteilmenge berechnet, die man modifizieren will. 3. Man wendet die Funktion aus 1. auf die Elemente der Menge aus 2. an. Ansonsten ist Excel eine recht merkwürdige Wahl für so ein Problem. Gefärbte Tabellen mit html ohne irgendwelche obskuren Module zu importieren könnte man bspw. wie folgt erzeugen: \sourceon Python \numberson # FizzBuzz def baueFizzBuzzMatrix(N,Spalten,fizz=5,buzz=7): Matrix = {} if N % Spalten == 0: Zeilen = N // Spalten else: Zeilen = N // Spalten + 1 zei = 1 spa = 1 for n in range(1,N+1): Matrix[zei,spa] = {"value": ""} if (n % fizz == 0 or str(fizz) in str(n)) and (n % buzz == 0 or str(buzz) in str(n)): Matrix[zei,spa]["value"] = "fibu" Matrix[zei,spa]["style"] = "background-color:tomato;" elif n % fizz == 0 or str(fizz) in str(n): Matrix[zei,spa]["value"] = "fizz" Matrix[zei,spa]["style"] = "background-color:tomato;" elif n % buzz == 0 or str(buzz) in str(n): Matrix[zei,spa]["value"] = "buzz" Matrix[zei,spa]["style"] = "background-color:tomato;" else: Matrix[zei,spa]["value"] = n Matrix[zei,spa]["style"] = "background-color:powderblue;" spa += 1 if n % Spalten == 0: zei += 1 spa = 1 return Matrix # Baue html-Tabelle auf Basis des Dictionary # Matrix = {(zei,spa): {"value": x, "style": s}} def baueHTMLTable(Matrix): Zeilen = max(zei for (zei,spa) in Matrix) Spalten = max(spa for (zei,spa) in Matrix) table = "\n" for zei in range(1,Zeilen+1): table += "\t\n" for spa in range(1,Spalten+1): if not (zei,spa) in Matrix: table += "\t\t\n" else: table += f"\t\t\n" table += "\t\n" table += "
{Matrix[zei,spa]['value']}
\n" return table # Baue das fertige html-Dokument mit def baueHTMLDokument(Matrix,fileName): html = f"\n\n\n{fileName}\n\n\n" html += baueHTMLTable(Matrix) html += "\n\n" with open(fileName,"w") as f: f.write(html) baueHTMLDokument(baueFizzBuzzMatrix(111,10),"FizzBuzz57.html") baueHTMLDokument(baueFizzBuzzMatrix(100,10,3,5),"FizzBuzz35.html") \sourceoff
1 2 3 4 fizz 6 buzz 8 9 fizz
11 12 13 buzz fizz 16 buzz 18 19 fizz
buzz 22 23 24 fizz 26 buzz buzz 29 fizz
31 32 33 34 fibu 36 buzz 38 39 fizz
41 buzz 43 44 fizz 46 buzz 48 buzz fizz
fizz fizz fizz fizz fizz fibu fibu fizz fizz fizz
61 62 buzz 64 fizz 66 buzz 68 69 fibu
buzz buzz buzz buzz fibu buzz buzz buzz buzz fizz
81 82 83 buzz fizz 86 buzz 88 89 fizz
buzz 92 93 94 fizz 96 buzz buzz 99 fizz
101 102 103 104 fibu 106 buzz 108 109 fizz
111
1 2 fizz 4 buzz fizz 7 8 fizz buzz
11 fizz fizz 14 fibu 16 17 fizz 19 buzz
fizz 22 fizz fizz buzz 26 fizz 28 29 fibu
fizz fizz fizz fizz fibu fizz fizz fizz fizz buzz
41 fizz fizz 44 fibu 46 47 fizz 49 buzz
fibu buzz fibu fibu buzz buzz fibu buzz buzz fibu
61 62 fizz 64 buzz fizz 67 68 fizz buzz
71 fizz fizz 74 fibu 76 77 fizz 79 buzz
fizz 82 fizz fizz buzz 86 fizz 88 89 fibu
91 92 fizz 94 buzz fizz 97 98 fizz buzz
Eine andere Matrix mit markierten Primzahlen und Quadratzahlen ergibt dann bspw.:
1 2 3 4 5 {2: 1, 3: 1} 7 {2: 3} 9 {2: 1, 5: 1}
11 {2: 2, 3: 1} 13 {2: 1, 7: 1} {3: 1, 5: 1} 16 17 {2: 1, 3: 2} 19 {2: 2, 5: 1}
{3: 1, 7: 1} {2: 1, 11: 1} 23 {2: 3, 3: 1} 25 {2: 1, 13: 1} {3: 3} {2: 2, 7: 1} 29 {2: 1, 3: 1, 5: 1}
31 {2: 5} {3: 1, 11: 1} {2: 1, 17: 1} {5: 1, 7: 1} 36 37 {2: 1, 19: 1} {3: 1, 13: 1} {2: 3, 5: 1}
41 {2: 1, 3: 1, 7: 1} 43 {2: 2, 11: 1} {3: 2, 5: 1} {2: 1, 23: 1} 47 {2: 4, 3: 1} 49 {2: 1, 5: 2}
{3: 1, 17: 1} {2: 2, 13: 1} 53 {2: 1, 3: 3} {5: 1, 11: 1} {2: 3, 7: 1} {3: 1, 19: 1} {2: 1, 29: 1} 59 {2: 2, 3: 1, 5: 1}
61 {2: 1, 31: 1} {3: 2, 7: 1} 64 {5: 1, 13: 1} {2: 1, 3: 1, 11: 1} 67 {2: 2, 17: 1} {3: 1, 23: 1} {2: 1, 5: 1, 7: 1}
71 {2: 3, 3: 2} 73 {2: 1, 37: 1} {3: 1, 5: 2} {2: 2, 19: 1} {7: 1, 11: 1} {2: 1, 3: 1, 13: 1} 79 {2: 4, 5: 1}
81 {2: 1, 41: 1} 83 {2: 2, 3: 1, 7: 1} {5: 1, 17: 1} {2: 1, 43: 1} {3: 1, 29: 1} {2: 3, 11: 1} 89 {2: 1, 3: 2, 5: 1}
{7: 1, 13: 1} {2: 2, 23: 1} {3: 1, 31: 1} {2: 1, 47: 1} {5: 1, 19: 1} {2: 5, 3: 1} 97 {2: 1, 7: 2} {3: 2, 11: 1} 100



   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.6, vom Themenstarter, eingetragen 2021-06-13

Es ist ja schon ma ein Vorteil, Einfältiger, dass Du nicht diese Farb-Codes 0000FFFF nutzt, sondern Farb-Namen, wie z.B. tomato hast. \sourceon Python \numberson def def_fill(x): ["C1"].fill = redFill return ws["B2"].fill = taublauFill for x in range(1,210,2): y1.append(x) if x%5==0: y2.append(1) else: y2.append("") ws.append([def_fill(1),2,3]) ws.append(["3"]+y1) ws.append(["5"]+y2) wb.save("/Users/ottoreincke/Desktop/ProjLeg/Exceldat/Färbeübung(210).xlsx") print(y1) print(y2) \sourceoff da sagt er zu: 'list' object has no attribute 'fill' Das "redFill" ist offensichtlich eine Methode. Warum man die nicht auf eine Liste anwenden kann, weiss ich nicht. Ich habe sie in eine Funktion gepackt und versucht aufzurufen.... Die Zellen, die gefärbt werden sollen, werden in die Liste y2 gepackt. Da müssten ja auch die Färbe-Infos hin, denn es sind ja wohl escape-Sequenzen. Auch das geht nicht: \sourceon Python \numberson def def_fill(x): Inhalt=[] Inhalt=["C","x"] ["Inhalt"].fill = redFill return \sourceoff


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.7, eingetragen 2021-06-13

Listen besitzen kein Attribut namens fill. Dein Code ergibt keinen Sinn. Berechne doch einfach, welche Zelle was enthalten und wie formattiert werden soll und dann weise zu. PS.: redFill ist keine Methode.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.8, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 15:47 - DerEinfaeltige in Beitrag No. 7) PS.: redFill ist keine Methode. \quoteoff Es ist ein Variable, wo das Ergebnis der Methode "PatternFill" gespeichert wird?


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.9, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 15:51 - Bekell in Beitrag No. 8) \quoteon(2021-06-13 15:47 - DerEinfaeltige in Beitrag No. 7) PS.: redFill ist keine Methode. \quoteoff \quoteoff Es ist ein Variable, wo das Ergebnis der Methode "PatternFill" gespeichert wird? \quoteon Berechne doch einfach, welche Zelle was enthalten und wie formattiert werden soll und dann weise zu. \quoteoff hab ich doch hier gemacht: \sourceon Python for x in range(1,210,2): y1.append(x) if x%5==0: y2.append(1) else: y2.append("") \numberson \sourceoff Es funktioniert auch! hiervon: \sourceon Python ws["B1"].fill = taublauFill \sourceoff versteh ich ausser dem ws gar nichts. Ich versteh nicht, warum die Excell-Zell Bezeichnung als String gesetzt wird?


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.10, eingetragen 2021-06-13

Zellennamen in Excel sind nunmal Strings bestehend aus Spaltenname und Zeilennummer. Das weiß sogar ich als Excelnicht(s)nutzer. Von daher verstehe ich die Frage nicht. Ein Worksheet ist ein Container, dessen Indizes/Schlüssel eben Excelzellennamen sind. Also schreibt man (wie sonst auch immer und überall) Container[Schlüssel], um auf den mit Schlüssel gespeicherten Inhalt des Containers zuzugreifen. Ist dieser Inhalt eine Excelzelle mit einem Attribut namens fill, dem man ein Patternfill-Objekt names taublauFill als Ergebnis der Methode PatternFill (offenbar ein Konstruktor oder eine Factory) zuweisen will, so schreibt man eben Container[Schlüssel].fill = taublauFill Heißt der Container nun ws und der Schlüssel "A1", so schreibt man eben \sourceon Python ws["A1"].fill = taublauFill \sourceoff Und nein, du berechnest nirgendwo Zellennamen. Du hängst Einträge ans Ende von Zeilen oder Spalten (was auch immer y1,y2 sind) an.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.11, vom Themenstarter, eingetragen 2021-06-13

Danke, Einfältiger, ich muß dann noch mal zum Unterscheid dieser beiden Zeilen was fragen: \sourceon Python \numberson ws["B1"].fill = taublauFill ws.append(["3"]+y1) \sourceoff ws meint ja immer Worksheet, also Arbeitsblatt. Das 2. ws mit dem append ist ein Container, das sehe ich, bei dem bei jedem Schleifendurchgang was reingeschrieben wird. Aber was ist das erste ws? Was bedeutet der Punkt und das fill? Das "B1" ist die Zellenbezeichnung, die übergeben wird. Warum steht da nicht ws.fill("B1")? Es ist die Anweisung, für eine bestimmte Zelle, die Methode Taublau aufzurufen. Ich hab dummerweise mein Python-Buch zuhause (ca. 1000 km) hab dies jetzt gebastelt zum Zellennamenaufrufen: \sourceon Python def def_zellennamen(h): strx="B"+str(h) return strx \numberson \sourceoff es funzt auch!


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.12, eingetragen 2021-06-13

\quoteon(2021-06-13 18:00 - Bekell in Beitrag No. 11) \sourceon Python ws["B1"].fill = taublauFill \sourceoff \quoteoff ws ist ein Worksheet. Ein Worksheet kennt eine Methode __getitem__, die unter anderem zu der Excelbezeichnung einer einzelnen Zelle eben diese Zelle liefert. Und diese Methode wird implizit aufgerufen, wenn man einen Wert in einem Paar eckiger Klammern hinter ein Worksheet-Objekt schreibt. Also ist ws["B1"] eine Zelle. Du hättest auch statt der Excelbezeichnung deren Koordinaten angeben und ws.cell(column=2, row=1) schreiben können. Eine Zelle ist ein StyleableObject und hat als solches ein fill-Attribut. Also setzt die Zuweisung dieses Attribut auf den Wert von taublauFill.


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.13, eingetragen 2021-06-13

ws["A1"] ist die Zelle mit dem Namen/den Koordinaten "A1" im Worksheet ws. Zellen haben (vermutlich dutzende) Attribute. Eines davon ist fill, in dem offenbar Informationen über die Darstellung des Zellenhintergrundes, also die "Füllung" gespeichert werden. Dem kann man dann irgendein Füllmusterstilobjekt (PatternFill-Objekt) zuweisen, in dem steht, welche Hintergrundfarbe, Schraffierung, Schattierung etc. angezeigt werden soll. taublauFill ist so ein Füllmusterstilobjekt, dem du vermutlich einen blauen Farbton und was-auch-immer zugewiesen hast. Details siehe oben, von scynja dir die Dokumentation herausgesucht und verlinkt hat. ws.append(iterable) erzeugt am unteren Ende des Worksheets eine neue Zeile und fügt dort die Werte aus dem iterable ein. In deinem Fall verknüpfst du die zwei Listen ["3"] und y1 und hängst das Ergebnis dann unten an. PS.: Statt in irgendein Pythonbuch würde ich ja eher in die Dokumentation von openpyxl schauen, wenn ich damit Probleme hätte. [Die Antwort wurde nach Beitrag No.11 begonnen.]


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.14, vom Themenstarter, eingetragen 2021-06-13

https://matheplanet.com/matheplanet/nuke/html/uploads/b/23651_Fa_rbeu_bung.png Eine Hürde hab ich schon, jetzt muß ich nur das alphanumerische Zählen von Excel noch irgendwie imitieren, und dann die Zahl in das gefärbte Feld reinbringen..... habt Ihr da eine Idee mit dem alphanumerischen Zählen? [Die Antwort wurde nach Beitrag No.12 begonnen.]


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.15, eingetragen 2021-06-13

\quoteon(2021-06-13 19:04 - Bekell in Beitrag No. 14) jetzt muß ich nur das alphanumerische Zählen von Excel noch irgendwie imitieren \quoteoff Nein, das musst du nicht: \quoteon(2021-06-13 18:48 - zippy in Beitrag No. 12) Du hättest auch statt der Excelbezeichnung deren Koordinaten angeben und ws.cell(column=2, row=1) schreiben können. \quoteoff


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.16, vom Themenstarter, eingetragen 2021-06-13

Hab jetzt die Schwierigkeit, die Zahlen in die roten Felder zu kriegen.... \sourceon Python \numberson or x in range(1,210,2): y1.append(x) if x%5==0: y2.append(1) ws.cell(1,x).fill = redFill else: y2.append("") #ws.cell(2,x).fill = redFill def def_zellennamen(h): # Hier wird der Spaltenbuchstabe mit der zeilennummer zu einer Zellen-Adresse verschmolzen. strx="B"+str(h) return strx #def_spaltennummer(h): #ws.cell(5,5).fill = taublauFill #ws[def_zellennamen(1)].fill = redFill #ws.append([def_zellennamen(1),2,3]) ws.append(["Nr"]+y1) ws.append(["Pz5"]+y2) \sourceoff sowas: ws.cell(1,x) = [1] funktioniert nicht...


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.17, eingetragen 2021-06-13

Vermutlich weil Excelzellen in ihrem value-Attribut keine Pythonlisten speichern können, sondern nur (string, float, int or datetime.datetime).


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.18, eingetragen 2021-06-13

\quoteon(2021-06-13 19:43 - Bekell in Beitrag No. 16) sowas: ws.cell(1,x) = [1] funktioniert nicht... \quoteoff Eine Zelle enthält nur einen Wert, also: ws.cell(1,x) = 1. [Die Antwort wurde nach Beitrag No.16 begonnen.]


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.19, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 19:48 - zippy in Beitrag No. 18) \quoteon(2021-06-13 19:43 - Bekell in Beitrag No. 16) sowas: ws.cell(1,x) = [1] funktioniert nicht... \quoteoff Eine Zelle enthält nur einen Wert, also: ws.cell(1,x) = 1. [Die Antwort wurde nach Beitrag No.16 begonnen.] \quoteoff dann kommt sowas: ws.cell(1,x) = 1 ^ SyntaxError: can't assign to function call


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.20, eingetragen 2021-06-13

ws.cell(1,x).value = 1


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.21, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 19:54 - zippy in Beitrag No. 20) ws.cell(1,x).value = 1 \quoteoff Danke, wo kuckst Du das nach, Zippy, welche Methoden das da gibt? Wenn ich fertig bin, poste ich das Ergebnis, weil: Vllt brauchts ja noch ein anderer


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.22, eingetragen 2021-06-13

\quoteon(2021-06-13 20:00 - Bekell in Beitrag No. 21) wo kuckst Du das nach, Zippy, welche Methoden das da gibt? \quoteoff Genau da, wohin Scynja schon vor 18 Beiträgen einen Link gepostet hat.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.23, vom Themenstarter, eingetragen 2021-06-13

Kennst Du eine Farbtabelle, wo diese Codes "FFFF0000"mit den dazugehörigen Farben unterlegt sind, damit man nicht ewig probieren muss, um seine Farben zu finden? Die dort hinterlegte ist etwas steinzeitrig... was sind denn das für Codes? https://encycolorpedia.de/88ff00


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.24, eingetragen 2021-06-13

\quoteon(2021-06-13 20:16 - Bekell in Beitrag No. 23) Kennst Du eine Farbtabelle, wo diese Codes "FFFF0000"mit den dazugehörigen Farben unterlegt sind, damit man nicht ewig probieren muss, um seine Farben zu finden? \quoteoff Der Farbcode (8-stellig) besteht aus einem 2-stelligen Wert für Transparenz, den du einfach auf 0 setzen kannst, und einem 6-stelligen Wert für die RGB-Farbe. Letzteren kannst du die entweder in jeder Tabelle für Webdesign nachschlagen oder einfach aus Excel abschreiben.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.25, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 20:30 - zippy in Beitrag No. 24) \quoteon(2021-06-13 20:16 - Bekell in Beitrag No. 23) Kennst Du eine Farbtabelle, wo diese Codes "FFFF0000"mit den dazugehörigen Farben unterlegt sind, damit man nicht ewig probieren muss, um seine Farben zu finden? \quoteoff Wenn du nicht mit indizierten Farben (8-stellig) sondern mit RGB-Farben (6-stellig) arbeitest, kannst du die entweder in jeder Tabelle für Webdesign nachschlagen oder einfach aus Excel abschreiben. \quoteoff wie würde in dem Fall diese XClasse aussehen: yellowFill = PatternFill(start_color="00FFFF00", end_color="00FFFF00", fill_type="solid") Und wo sind die in excel zu finden, die Codes? und warum sind die anderswo nur sechsstellig: FF00FF für magenta


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.26, eingetragen 2021-06-13

\quoteon(2021-06-13 20:31 - Bekell in Beitrag No. 25) Und wo sind die in excel zu finden, die Codes? \quoteoff Kontextmenü der Zelle > Zellen formatieren > Ausfüllen > Weitere Farben > Benutzerdefiniert > Feld "Hex" ohne das führende "#".


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.27, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 20:36 - zippy in Beitrag No. 26) \quoteon(2021-06-13 20:31 - Bekell in Beitrag No. 25) Und wo sind die in excel zu finden, die Codes? \quoteoff Kontextmenü der Zelle > Zellen formatieren > Ausfüllen > Weitere Farben > Benutzerdefiniert > Feld "Hex" ohne das führende "#". \quoteoff da werden aber nicht die Codes angezeigt.... die brauch ich doch, um das gewünschte zu erhalten.... Theoretisch müsste man doch auch die Spaltenbreite als Cell.attribut anbringen können automatisch?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.28, eingetragen 2021-06-13

\quoteon(2021-06-13 20:39 - Bekell in Beitrag No. 27) da werden aber nicht die Codes angezeigt.... die brauch ich doch, um das gewünschte zu erhalten.... \quoteoff Wenn ich eine Zelle gelb färbe, steht in diesem Feld "#FFFF00": Falls du irgendein antiquiertes Excel ohne das "Hex"-Feld benutzt, must du die drei Zahlen in den Felder "Rot", "Grün" und "Blau" nach Hex umrechnen und die entstehenden 2-stelligen Hex-Zahlen hintereinanderhängen.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.29, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 20:46 - zippy in Beitrag No. 28) \quoteon(2021-06-13 20:39 - Bekell in Beitrag No. 27) da werden aber nicht die Codes angezeigt.... die brauch ich doch, um das gewünschte zu erhalten.... \quoteoff Wenn ich eine Zelle gelb färbe, steht in diesem Feld "#FFFF00". Falls du irgendein antiquiertes Excel ohne das "Hex"-Feld benutzt, must du die drei Zahlen in den Felder "Rot", "Grün" und "Blau" nach Hex umrechnen und die entstehenden 2-stelligen Hex-Zahlen hintereinanderhängen. \quoteoff Mein Excel: 16,49 for Mac von 2019 Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten?


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.30, eingetragen 2021-06-13

\quoteon(2021-06-13 20:49 - Bekell in Beitrag No. 29) Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten? \quoteoff Habe ich oben ergänzt.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.31, vom Themenstarter, eingetragen 2021-06-13

\quoteon(2021-06-13 20:52 - zippy in Beitrag No. 30) \quoteon(2021-06-13 20:49 - Bekell in Beitrag No. 29) Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten? \quoteoff Habe ich oben ergänzt. \quoteoff Danke, hab's gefunden, es sieht bei mir etwas anders aus. Da sind dann auch die Hex-Werte. Weisst Du das nooch mit der Cellebreite.. Vllt. gibt es so einen Befehl cell.widt() morgen nachmittag poste ich das Ergebnis.


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.32, eingetragen 2021-06-13

\quoteon(2021-06-13 21:04 - Bekell in Beitrag No. 31) Weisst Du das nooch mit der Cellebreite.. Vllt. gibt es so einen Befehl cell.widt() \quoteoff Die Breite ist keine Eigenschaft der einzelnen Zelle, sondern der gesamten Spalte. Wenn du in das Suchfeld der OpenPyXl-Doku "width" eingibst, findest du die zuständige Klasse openpyxl.worksheet.dimensions.ColumnDimension.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.33, vom Themenstarter, eingetragen 2021-06-13

Danke, Zippy, aber die Dokumentation ist sehr irritierend (nicht idiotensicher) ich weiss nicht, was ich da zuvor implementieren muss, etc. bei w3scools versteh ich alles, hier nur sehr bedingt.... Es sind keine Beispiele....


   Profil
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2948
  Beitrag No.34, eingetragen 2021-06-13

\quoteon(2021-06-13 21:21 - Bekell in Beitrag No. 33) ich weiss nicht, was ich da zuvor implementieren muss, etc. \quoteoff Du schreibst beispielsweise (wenn ws dein Worksheet ist): \sourceon python ws.column_dimensions['G'].width = 20 \sourceoff An den Spaltenbuchstaben (hier 'G') kommst du entweder, indem du das column_letter-Attribut einer Zelle in dieser Spalte ausliest, oder, indem du die get_column_letter-Methode aus openpyxl.utils für die Übersetzung Index $\to$ Buchstabe benutzt.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2613
  Beitrag No.35, vom Themenstarter, eingetragen 2021-06-13

https://matheplanet.com/matheplanet/nuke/html/uploads/b/23651_Fa_rbeu_bungfertig.png Danke Zippy, hat geklappt: \sourceon Python \numberson from openpyxl.utils import get_column_letter ... ws.column_dimensions[get_column_letter(y)].width = 5 # nich so einfach \sourceoff Die beiden Sachen hab ich implementiert.... vielen Dank nochmals, auch an den Einfältigen, für die zielführende Begleitung jetzt muss ich in's Bett....


   Profil
dietmar0609
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 29.06.2007
Mitteilungen: 3099
Wohnort: Oldenburg , Deutschland
  Beitrag No.36, eingetragen 2021-06-14

Vielleich passt folgendes Problem hier rein: Ich möchte in einer Zeile oder Spalte selektiv nur die Felder einer bestimmten Hintergrundfarbe addieren. Habe es mit VB vergeblich versucht. Gibt es da Ansätze oder Lösungen ? LG Dietmar


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3040
  Beitrag No.37, eingetragen 2021-06-14

Hier in openpyxl könnte man bspw. über den Bereich iterieren und die fill-Attribute der Zellen abfragen. Das sollte in VB grundsätzlich auch funktionieren. Du musst dazu natürlich wissen, wie genau das Stilobjekt aussieht und wie dessen Farbattribute heißen.


   Profil
haegar90
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 18.03.2019
Mitteilungen: 792
Wohnort: Gog
  Beitrag No.38, eingetragen 2021-06-14

\sourceon Basic Sub Schleife() Dim i, j, cnt As Long For i = 1 To 10 For j = 1 To 15 nbr = i * j + i Cells(i, j).Value = nbr If Cells(i, j).Value Mod 3 = 0 Then Cells(i, j).Interior.Color = vbRed If Cells(i, j).Value Mod 4 = 0 Then Cells(i, j).Interior.Color = vbBlue If Cells(i, j).Value Mod 5 = 0 Then Cells(i, j).Interior.Color = vbGreen If Cells(i, j).Value Mod 7 = 0 Then Cells(i, j).Interior.Color = vbYellow Next Next cnt = 0 For i = 1 To 15 If Cells(1, i).Interior.Color = vbYellow Then cnt = cnt + Cells(1, i).Value Next Cells(12, 1).Value = cnt End Sub \sourceoff https://matheplanet.com/matheplanet/nuke/html/uploads/b/51352_FarbigeZellenExcel.png Hallo, habe mich jetzt auch länger nicht mehr mit VisualBasic befasst. Prinzipiell funktioniert es aber so mit dem Excel vba. Ist nur als Vorschlag gedacht. Könnte auch eine Sub machen mit Übergabe, Suchbereich und Farbe. Vermutlich gibt es aber die Funktion bereits. Weiß aber nicht ob auch in Excel vba verfügbar, da der Umfang von vba im Vergleich zu VisualBasic eher erbärmlich ist. Alles was im Quellcode vor "cnt=0" steht füllt nur die Zellen, der Rest ist die Suche nach der Farbe.


   Profil
dietmar0609
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 29.06.2007
Mitteilungen: 3099
Wohnort: Oldenburg , Deutschland
  Beitrag No.39, eingetragen 2021-06-15

Hallo Haegar, Vielen Dank, habe den Code verstanden. Wie binde ich ihn jetzt in mein Excel Sheet ein? Das konnte ich alles früher mal habe es aber in der Zwischenzeit vergessen. Gruß Dietmar


   Profil
-->> Fortsetzung auf der nächsten Seite -->>
Seite 1Gehe zur Seite: 1 | 2  

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]