
115122
31.03.2016
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:
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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300433
Url: https://administrator.de/forum/zugriff-auf-excel-sheet-write-mag-nicht-funktionieren-300433.html
Ausgedruckt am: 23.04.2025 um 09:04 Uhr
10 Kommentare
Neuester Kommentar

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

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"

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

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.Gibt es da einen Unterschied ?
In VBA ist das gleich.

aber ist das nicht ein Paradebeispiel für den Einsatz eines Select Case
@127944Unter Python gibt es leider kein select oder switch case

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
Dann mal ganz schnell duck und wech - und lieber TO - halte dich an das was jodel geschrieben hat