Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Zellen färben in Excel über Python
Druckversion
Druckversion
Antworten
Antworten
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: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-06-12

Python
  1. import openpyxl
  2. from openpyxl import Workbook
  3. from openpyxl.styles import Color, PatternFill, Font, Border
  4. from openpyxl.styles import colors
  5. from openpyxl.cell import Cell
  6.  
  7. y1=[]
  8. y2=[]
  9. x=0
  10.  
  11. wb = openpyxl.Workbook()
  12. ws = wb.active
  13.  
  14. redFill = PatternFill(start_color="FFFF0000",
  15. end_color="FFFF0000",
  16. fill_type="solid")
  17.  
  18. taublauFill = PatternFill(start_color="0099CCFF",
  19. end_color="0099CCFF",
  20. fill_type="solid")
  21.  
  22.  
  23.  
  24. ws["A1"].fill = redFill
  25. for x in range(1,210,2):
  26. y1.append(x)
  27. if x%5==0:
  28. y2.append(1)
  29. else:
  30. y2.append("")
  31.  
  32. ws.append(["3"]+y1)
  33. ws.append((["5"].fill = taublauFill)+y2)
  34. wb.save("/Desktop/ProjLeg/Exceldat/Färbeübung(210).xlsx")
  35. print(y1)
  36. print(y2)


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?



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 410
Wohnort: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-06-12


Hallo Bekell,

ist yellowFill definiert?



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2021-06-12


2021-06-12 21:34 - Scynja in Beitrag No. 1 schreibt:
..ist yellowFill definiert?

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:
Python
  1. ws["C2:C4"].fill = redFill
  2.  
  3. AttributeError: 'tuple' object has no attribute 'fill'



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 410
Wohnort: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2021-06-12


redFill ist ein Objekt der Klasse PatternFill. Die Klasse kannst du dir hier durchlesen:

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.
Python
def __init__(self, patternType=None, fgColor=Color(), bgColor=Color(),
                 fill_type=None, start_color=None, end_color=None):




Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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:
Python
  1. # FizzBuzz
  2. def baueFizzBuzzMatrix(N,Spalten,fizz=5,buzz=7):
  3. Matrix = {}
  4. if N % Spalten == 0:
  5. Zeilen = N // Spalten
  6. else:
  7. Zeilen = N // Spalten + 1
  8. zei = 1
  9. spa = 1
  10. for n in range(1,N+1):
  11. Matrix[zei,spa] = {"value": ""}
  12. if (n % fizz == 0 or str(fizz) in str(n)) and (n % buzz == 0 or str(buzz) in str(n)):
  13. Matrix[zei,spa]["value"] = "fibu"
  14. Matrix[zei,spa]["style"] = "background-color:tomato;"
  15. elif n % fizz == 0 or str(fizz) in str(n):
  16. Matrix[zei,spa]["value"] = "fizz"
  17. Matrix[zei,spa]["style"] = "background-color:tomato;"
  18. elif n % buzz == 0 or str(buzz) in str(n):
  19. Matrix[zei,spa]["value"] = "buzz"
  20. Matrix[zei,spa]["style"] = "background-color:tomato;"
  21. else:
  22. Matrix[zei,spa]["value"] = n
  23. Matrix[zei,spa]["style"] = "background-color:powderblue;"
  24. spa += 1
  25. if n % Spalten == 0:
  26. zei += 1
  27. spa = 1
  28. return Matrix
  29.  
  30. # Baue html-Tabelle auf Basis des Dictionary
  31. # Matrix = {(zei,spa): {"value": x, "style": s}}
  32. def baueHTMLTable(Matrix):
  33. Zeilen = max(zei for (zei,spa) in Matrix)
  34. Spalten = max(spa for (zei,spa) in Matrix)
  35. table = "
  36. <table>\n"
  37. for zei in range(1,Zeilen+1):
  38. table += "\t<tr>\n"
  39. for spa in range(1,Spalten+1):
  40. if not (zei,spa) in Matrix:
  41. table += "\t\t<td></td>\n"
  42. else:
  43. table += f"\t\t<td style={Matrix[zei,spa]['style']}>{Matrix[zei,spa]['value']}</td>\n"
  44. table += "\t</tr>\n"
  45. table += "</table>
  46. \n"
  47. return table
  48.  
  49. # Baue das fertige html-Dokument mit
  50. def baueHTMLDokument(Matrix,fileName):
  51. html = f"<!DOCTYPE html>\n<html>\n<head>\n<title>{fileName}</title>\n</head>\n<body>\n"
  52. html += baueHTMLTable(Matrix)
  53. html += "</body>\n</html>\n"
  54. with open(fileName,"w") as f:
  55. f.write(html)
  56.  
  57. baueHTMLDokument(baueFizzBuzzMatrix(111,10),"FizzBuzz57.html")
  58. baueHTMLDokument(baueFizzBuzzMatrix(100,10,3,5),"FizzBuzz35.html")

1234fizz6buzz89fizz
111213buzzfizz16buzz1819fizz
buzz222324fizz26buzzbuzz29fizz
31323334fibu36buzz3839fizz
41buzz4344fizz46buzz48buzzfizz
fizzfizzfizzfizzfizzfibufibufizzfizzfizz
6162buzz64fizz66buzz6869fibu
buzzbuzzbuzzbuzzfibubuzzbuzzbuzzbuzzfizz
818283buzzfizz86buzz8889fizz
buzz929394fizz96buzzbuzz99fizz
101102103104fibu106buzz108109fizz
111



12fizz4buzzfizz78fizzbuzz
11fizzfizz14fibu1617fizz19buzz
fizz22fizzfizzbuzz26fizz2829fibu
fizzfizzfizzfizzfibufizzfizzfizzfizzbuzz
41fizzfizz44fibu4647fizz49buzz
fibubuzzfibufibubuzzbuzzfibubuzzbuzzfibu
6162fizz64buzzfizz6768fizzbuzz
71fizzfizz74fibu7677fizz79buzz
fizz82fizzfizzbuzz86fizz8889fibu
9192fizz94buzzfizz9798fizzbuzz



Eine andere Matrix mit markierten Primzahlen und Quadratzahlen ergibt dann bspw.:

12345{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}1617{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}3637{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



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.
Python
  1. def def_fill(x):
  2. ["C1"].fill = redFill
  3. return
  4.  
  5. ws["B2"].fill = taublauFill
  6. for x in range(1,210,2):
  7. y1.append(x)
  8. if x%5==0:
  9. y2.append(1)
  10. else:
  11. y2.append("")
  12.  
  13. ws.append([def_fill(1),2,3])
  14. ws.append(["3"]+y1)
  15. ws.append(["5"]+y2)
  16. wb.save("/Users/ottoreincke/Desktop/ProjLeg/Exceldat/Färbeübung(210).xlsx")
  17. print(y1)
  18. print(y2)

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:
Python
  1. def def_fill(x):
  2. Inhalt=[]
  3. Inhalt=["C","x"]
  4. ["Inhalt"].fill = redFill
  5. return





-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 15:47 - DerEinfaeltige in Beitrag No. 7 schreibt:
PS.: redFill ist keine Methode.

Es ist ein Variable, wo das Ergebnis der Methode "PatternFill" gespeichert wird?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 15:51 - Bekell in Beitrag No. 8 schreibt:
2021-06-13 15:47 - DerEinfaeltige in Beitrag No. 7 schreibt:
PS.: redFill ist keine Methode.

Es ist ein Variable, wo das Ergebnis der Methode "PatternFill" gespeichert wird?



Berechne doch einfach, welche Zelle was enthalten und wie formattiert werden soll und dann weise zu.

hab ich doch hier gemacht:
Python
  1. for x in range(1,210,2):
  2. y1.append(x)
  3. if x%5==0:
  4. y2.append(1)
  5. else:
  6. y2.append("")
Es funktioniert auch!


hiervon:
Python
ws["B1"].fill = taublauFill
versteh ich ausser dem ws gar nichts. Ich versteh nicht, warum die Excell-Zell Bezeichnung als String gesetzt wird?



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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
Python
ws["A1"].fill = taublauFill


Und nein, du berechnest nirgendwo Zellennamen.
Du hängst Einträge ans Ende von Zeilen oder Spalten (was auch immer y1,y2 sind) an.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, vom Themenstarter, eingetragen 2021-06-13


Danke, Einfältiger, ich muß dann noch mal zum Unterscheid dieser beiden Zeilen was fragen:

Python
  1. ws["B1"].fill = taublauFill
  2. ws.append(["3"]+y1)

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:
Python
  1. def def_zellennamen(h):
  2. strx="B"+str(h)
  3. return strx
es funzt auch!







-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, eingetragen 2021-06-13


2021-06-13 18:00 - Bekell in Beitrag No. 11 schreibt:
Python
ws["B1"].fill = taublauFill


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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.]


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2021-06-13




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.]


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, eingetragen 2021-06-13


2021-06-13 19:04 - Bekell in Beitrag No. 14 schreibt:
jetzt muß ich nur das alphanumerische Zählen von Excel noch irgendwie imitieren

Nein, das musst du nicht:

2021-06-13 18:48 - zippy in Beitrag No. 12 schreibt:
Du hättest auch statt der Excelbezeichnung deren Koordinaten angeben und ws.cell(column=2, row=1) schreiben können.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, vom Themenstarter, eingetragen 2021-06-13


Hab jetzt die Schwierigkeit, die Zahlen in die roten Felder zu kriegen....
Python
  1. or x in range(1,210,2):
  2. y1.append(x)
  3. if x%5==0:
  4. y2.append(1)
  5. ws.cell(1,x).fill = redFill
  6. else:
  7. y2.append("")
  8. #ws.cell(2,x).fill = redFill
  9.  
  10. def def_zellennamen(h): # Hier wird der Spaltenbuchstabe mit der zeilennummer zu einer Zellen-Adresse verschmolzen.
  11. strx="B"+str(h)
  12. return strx
  13.  
  14. #def_spaltennummer(h):
  15.  
  16. #ws.cell(5,5).fill = taublauFill
  17. #ws[def_zellennamen(1)].fill = redFill
  18. #ws.append([def_zellennamen(1),2,3])
  19. ws.append(["Nr"]+y1)
  20. ws.append(["Pz5"]+y2)

sowas:
ws.cell(1,x) = [1]
funktioniert nicht...



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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).



-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.18, eingetragen 2021-06-13


2021-06-13 19:43 - Bekell in Beitrag No. 16 schreibt:
sowas:
ws.cell(1,x) = [1]
funktioniert nicht...

Eine Zelle enthält nur einen Wert, also: ws.cell(1,x) = 1.

[Die Antwort wurde nach Beitrag No.16 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.19, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 19:48 - zippy in Beitrag No. 18 schreibt:
2021-06-13 19:43 - Bekell in Beitrag No. 16 schreibt:
sowas:
ws.cell(1,x) = [1]
funktioniert nicht...

Eine Zelle enthält nur einen Wert, also: ws.cell(1,x) = 1.

[Die Antwort wurde nach Beitrag No.16 begonnen.]

dann kommt sowas:
    ws.cell(1,x) = 1
    ^
SyntaxError: can't assign to function call


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.20, eingetragen 2021-06-13


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



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.21, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 19:54 - zippy in Beitrag No. 20 schreibt:
ws.cell(1,x).value = 1

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


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.22, eingetragen 2021-06-13


2021-06-13 20:00 - Bekell in Beitrag No. 21 schreibt:
wo kuckst Du das nach, Zippy, welche Methoden das da gibt?

Genau da, wohin Scynja schon vor 18 Beiträgen einen Link gepostet hat.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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?
encycolorpedia.de/88ff00


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.24, eingetragen 2021-06-13


2021-06-13 20:16 - Bekell in Beitrag No. 23 schreibt:
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?

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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.25, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 20:30 - zippy in Beitrag No. 24 schreibt:
2021-06-13 20:16 - Bekell in Beitrag No. 23 schreibt:
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?

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.

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



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.26, eingetragen 2021-06-13


2021-06-13 20:31 - Bekell in Beitrag No. 25 schreibt:
Und wo sind die in excel zu finden, die Codes?

Kontextmenü der Zelle > Zellen formatieren > Ausfüllen > Weitere Farben > Benutzerdefiniert > Feld "Hex" ohne das führende "#".



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.27, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 20:36 - zippy in Beitrag No. 26 schreibt:
2021-06-13 20:31 - Bekell in Beitrag No. 25 schreibt:
Und wo sind die in excel zu finden, die Codes?

Kontextmenü der Zelle > Zellen formatieren > Ausfüllen > Weitere Farben > Benutzerdefiniert > Feld "Hex" ohne das führende "#".

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?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.28, eingetragen 2021-06-13


2021-06-13 20:39 - Bekell in Beitrag No. 27 schreibt:
da werden aber nicht die Codes angezeigt.... die brauch ich doch, um das gewünschte zu erhalten....

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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.29, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 20:46 - zippy in Beitrag No. 28 schreibt:
2021-06-13 20:39 - Bekell in Beitrag No. 27 schreibt:
da werden aber nicht die Codes angezeigt.... die brauch ich doch, um das gewünschte zu erhalten....

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.

Mein Excel: 16,49 for Mac von 2019
Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.30, eingetragen 2021-06-13


2021-06-13 20:49 - Bekell in Beitrag No. 29 schreibt:
Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten?

Habe ich oben ergänzt.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.31, vom Themenstarter, eingetragen 2021-06-13


2021-06-13 20:52 - zippy in Beitrag No. 30 schreibt:
2021-06-13 20:49 - Bekell in Beitrag No. 29 schreibt:
Bei mir stehen keine Zahlen in drei Feldern, kannst Du mal einen Screenshot posten?

Habe ich oben ergänzt.

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.


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.32, eingetragen 2021-06-13


2021-06-13 21:04 - Bekell in Beitrag No. 31 schreibt:
Weisst Du das nooch mit der Cellebreite.. Vllt. gibt es so einen Befehl cell.widt()

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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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....


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2447
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.34, eingetragen 2021-06-13


2021-06-13 21:21 - Bekell in Beitrag No. 33 schreibt:
ich weiss nicht, was ich da zuvor implementieren muss, etc.

Du schreibst beispielsweise (wenn ws dein Worksheet ist):
python
ws.column_dimensions['G'].width = 20

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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2454
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.35, vom Themenstarter, eingetragen 2021-06-13




Danke Zippy, hat geklappt:
Python
  1. from openpyxl.utils import get_column_letter
  2. ...
  3. ws.column_dimensions[get_column_letter(y)].width = 5 # nich so einfach

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


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
dietmar0609
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 29.06.2007
Mitteilungen: 3091
Wohnort: Oldenburg , Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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  



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2932
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
haegar90
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 18.03.2019
Mitteilungen: 667
Wohnort: Gog
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.38, eingetragen 2021-06-14

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


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.


-----------------
Gruß haegar



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
dietmar0609
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 29.06.2007
Mitteilungen: 3091
Wohnort: Oldenburg , Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  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
 



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
-->> Fortsetzung auf der nächsten Seite -->>
Seite 1Gehe zur Seite: 1 | 2  
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


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]