115122
Goto Top

Zugriff auf Excel Sheet "Write" mag nicht funktionieren

Ich habe eine Excel mit einer Spalte, in welcher Zahlen von 1 bis 6 stehen. Diese sollen in meinem kleinen Programm eingeteilt werden in "gut" (1,2), "mittel" (3,4) und "schlecht" (5,6).

Die Zahlen stehen in Spalte B, die Einteilung soll in Spalte C stehen.

Mein Code bisher:

from openpyxl import load_workbook

wb = load_workbook("C:\\temp\\Test\\daten.xlsx")  
sheet1 = wb['Zustand']  
sheet1['C1'] = "Zustandsbeschreibung"  
for cell in sheet1.iter_rows('B2:B533'):  
    for cellC in sheet1.iter_rows('C2:C533'):  
        if cell == "1" or cell == "2":  
            sheet1[cellC] = "gut"  
        elif cell == "3" or cell == "4":  
            sheet1[cellC] = "mittel"  
        elif cell == "5" or cell == "6":  
            sheet1[cellC] = "schlecht"  

wb.save("C:\\temp\\Test\\sample.xlsx")  
print "Vorgang abgeschlossen"  

Er läuft durch, speichert die neue "sample.xlsx", also alles so weit so gut. Oben schreibe ich eine neue Überschrift in C1, das funktioniert auch. Also sollte es nach meinem Verständnis in der For Schleife durch den Code "sheet1[cellC] = 'gut'" ebenso funktionieren, einen Text so in eine Zelle zu schreiben.

Alternativ habe ich schon folgendes durchgetestet:

sheet1["'" + cellC + "'"] = "gut"  

sheet1['cellC'] = "gut"  

Ebenso habe ich schon getestet, iter_columns statt iter_rows zu nehmen. Bekomme aber folgende Meldung: AttributeError: 'Worksheet' object has no attribute 'iter_columns'

Hat jemand eine Idee oder kann mir weiterhelfen ? Ich glaube, dass mein Fehler nicht ganz so groß ist, aber ich komme nicht drauf.

Grüße

Content-Key: 300433

Url: https://administrator.de/contentid/300433

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: 127944
127944 31.03.2016 um 09:26:48 Uhr
Goto Top
Moin,

wenn ich deinen Code richtig verstehe, dann ist cellC eine Zeile, und nicht eine Zelle.

Gruß
Mitglied: 115122
115122 31.03.2016 um 09:38:36 Uhr
Goto Top
Hm, ich dachte, wenn ich die Range 'C2:C533' übergebe, wird nur über diese Zellen iteriert.
Mitglied: 114757
Lösung 114757 31.03.2016 aktualisiert um 10:18:44 Uhr
Goto Top
from openpyxl import load_workbook

wb = load_workbook("C:\\temp\\Test\\daten.xlsx")  
sheet1 = wb['Zustand']  
sheet1['C1'].value = "Zustandsbeschreibung"  
for cell in sheet1.iter_rows('B2:C533'):  
        if cell.value == "1" or cell.value == "2":  
            cell[1].value = "gut"  
        elif cell.value == "3" or cell.value == "4":  
            cell[1].value = "mittel"  
        elif cell.value == "5" or cell.value == "6":  
            cell[1].value = "schlecht"  

wb.save("C:\\temp\\Test\\sample.xlsx")  
print "Vorgang abgeschlossen"  
Gruß jodel32
Mitglied: 127944
127944 31.03.2016 um 10:26:06 Uhr
Goto Top
Ungetestet da kein VBA zur Hand aber ist das nicht ein Paradebeispiel für den Einsatz eines Select Case?

Select Case cell.value
  Case 1,2 :cell[1].value = "gut"  
  Case 3 to 4: cell[1].value = "mittel"  
  Case is >4 ans Is <=6 : cell[1].value = "schlecht"  
  Case Else  MsgBox "Da ist was schief gelaufen"  
End Select
Mitglied: 115122
115122 31.03.2016 um 10:29:07 Uhr
Goto Top
Danke. Ich hatte den falschen Raum bei iter_rows angegeben.

Andere Frage: Wieso funktioniert...

sheet1['C1'] = "Zustandsbeschreibung"   

genauso wie...

sheet1['C1'].value = "Zustandsbeschreibung"   

Gibt es da einen Unterschied ?
Mitglied: 114757
114757 31.03.2016 aktualisiert um 10:35:35 Uhr
Goto Top
Zitat von @115122:
Gibt es da einen Unterschied ?
Nein, value ist aber die "Default-Property" eines Ranges deswegen kann man sie weglassen wenn man möchte, ich persönlich gebe sie immer an, ist für mich eindeutiger.
In VBA ist das gleich.
Mitglied: 114757
114757 31.03.2016 aktualisiert um 10:38:05 Uhr
Goto Top
aber ist das nicht ein Paradebeispiel für den Einsatz eines Select Case
@127944
Unter Python gibt es leider kein select oder switch case face-wink
Mitglied: 127944
127944 31.03.2016 um 10:39:19 Uhr
Goto Top
Man sollte sich nicht mit mehreren Themen zur selben Zeit befassen ^^
Dann mal ganz schnell duck und wech - und lieber TO - halte dich an das was jodel geschrieben hat
Mitglied: 115122
115122 31.03.2016 um 10:51:56 Uhr
Goto Top
Alles klar, danke für deine/eure Hilfe und die Informationen.
Mitglied: 115122
115122 31.03.2016 um 10:52:58 Uhr
Goto Top
Es gibt in Python kein Case, das wusste ich zum Glück schon vorher. ;)