Openpyxl: Manipulation der Zelle Werte

Ich versuche, die pull-Werte von Zellen aus einem excel-sheet, tun Mathe mit Ihnen, und schreiben die Ausgabe in einem neuen Blatt. Ich erhalte eine ErrorType. Ich habe den code erfolgreich vor, sondern nur zugegeben, dieser Aspekt, also der code wurde destilliert unter:

import openpyxl

#set up ws from file, and ws_out write to new file

def get_data():
    first = 0
    second = 0
    for x in range (1, 1000):
        if ws.cell(row=x, column=1).value == 'string':
            for y in range (1, 10):            #Only need next ten rows after 'string'

                ws_out.cell(row=y, column=1).value = ws.cell(row=x+y, column=1).value

                second = first                             #displaces first -> second
                first = ws.cell(row=x+y, column=1).value/100     #new value for first
                difference = first - second

                ws_out.cell(row=x+y+1, column=1).value = difference    #add to output
            break

Einen TypeError message:

erste = ws.Zelle(Zeile=x+y, Spalte=1).Wert)/100

TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'

Ich nehme an, das bezieht sich auf die ws.Zelle Wert und 100, bzw. so habe ich es auch versucht:

first = int(ws.cell(row=x, column=1))/100 #also tried with float

Wirft:

TypeError: int() argument muss eine Zeichenkette oder eine Zahl

Habe ich bestätigt, dass jede Zelle in der Spalte aus, die nur aus zahlen. Darüber hinaus openpyxl Zelle.data_type gibt 'n' (vermutlich für die Anzahl so weit wie ich kann sagen, durch die Dokumentation).

Habe ich auch getestet, mehr einfache Mathematik, und habe den gleichen Fehler.

Alle meine Suche scheint zu openpyxl normal zu Verhalten wie diese. Mache ich etwas falsch, oder ist das einfach eine Einschränkung des Moduls? Wenn ja, gibt es irgendwelche programmatischen workarounds?

Als bonus, Tipps zum schreiben von code prägnanter wäre sehr geschätzt werden. Ich bin erst am Anfang, und das Gefühl, es muss ein sauberer Weg zu schreiben, oder Ideen wie diese.

Python 3.3, openpyxl-1.6.2, Windows 7


Zusammenfassung

cfi ' s Antwort hat mir geholfen es herauszufinden, obwohl ich eine etwas andere Problemumgehung. Für die überprüfung der ursprünglichen Datei, es war eine leere Zelle (die hatte ich vorher übersehen hatten). Da ich neu mit diesem code später auf Spalten mit mehr sporadisch leere Zellen, die ich verwendet habe:

if ws.cell(row=x+r, column=40).data_type == 'n':
    second = first                             #displaces first -> second
    first = ws.cell(row=x+y, column=1).value/100     #new value for first
    difference = first - second

    ws_out.cell(row=x+y+1, column=1).value = difference    #add to output

So, wenn eine bestimmte Zelle leer war, wurde es ignoriert und übersprungen.

  • Bitte immer nach dem code entspricht, den zitierten Fehler. row=x+r bezieht sich auf eine variable r, die nicht vorhanden ist in deinem code.
  • Vielen Dank, aktualisiert die Fehlermeldung.
InformationsquelleAutor Jonathan | 2013-07-08
Schreibe einen Kommentar