Openpyxl: la Manipulation des valeurs de cellule

Je suis en train de tirer les valeurs des cellules d'une feuille excel, faire des maths avec eux, et écrire la sortie d'une nouvelle feuille. Je reçois un ErrorType. J'ai exécuter le code avec succès avant, mais juste ajouté cet aspect de celui-ci, ce code a été distillée à ci-dessous:

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

Déclenche une exception TypeError message:

premier = ws.cellule(ligne=x+y, column=1).valeur)/100

TypeError: unsupported operand type(s) de /: 'NoneType' et de 'int'

Je suppose que c'est en se référant à la ws.la valeur de la cellule et 100, respectivement, donc j'ai aussi essayé:

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

Qui soulève:

TypeError: int() argument doit être une chaîne de caractères ou un nombre

J'ai confirmé que toutes les cellules de la colonne est composée de chiffres. En outre, openpyxl de la cellule.data_type renvoie 'n' (sans doute pour nombre d'aussi loin que je peux dire par la documentation).

J'ai aussi testé de plus simple, les mathématiques, et ont la même erreur.

L'ensemble de mes recherches semble openpyxl normalement se comporter comme cela. Suis-je en train de faire quelque chose de mal, ou est-ce simplement une limitation du module? Si oui, existe-il des solutions programmatiques?

En bonus, des conseils sur l'écriture de code de façon plus succincte serait très apprécié. Je suis à peine de commencer, et de sentir, il doit y avoir une manière plus propre d'écrire une des idées de ce genre.

Python 3.3, openpyxl-1.6.2, Windows 7


Résumé

de la fci réponse m'a aidé à le comprendre, même si j'ai utilisé un peu différente de solution de contournement. Sur l'inspection de l'origine du fichier, il y avait une cellule vide (que j'ai manqué plus tôt). Comme je vais l'être à nouveau à l'aide de ce code un peu plus tard sur les colonnes avec plus sporadique des cellules vides, j'ai utilisé:

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

Ainsi, si une cellule est vide, on a ignoré et a sauté.

  • Veuillez toujours poster le code qui correspond à la cité de l'erreur. row=x+r fait référence à une variable r qui n'existe pas dans votre code.
  • Merci, mis à jour le message d'erreur.
InformationsquelleAutor Jonathan | 2013-07-08