7
votes

XLRD Excel Script convertissant "# N / A" à 42

J'ai un script qui tire des données d'une feuille de calcul Excel à l'aide du module XLRD, en particulier la méthode Row_Values ​​(). Il semble faire un excellent travail, à l'exception de l'endroit où "# N / A" a été généré automatiquement par des vlookups précédents, auquel cas XLRD obtient "# N / A" comme entier 42.

J'ai consulté les méthodes de formatage des chaînes mais que cela ne pouvait pas voir comment c'était le problème.

En plus d'avoir un script qui a découvert le sens de la vie (42), quelqu'un peut-il suggérer quelle est la question?

acclamations

Remarque: la feuille n'a plus de vlookups, toutes les valeurs ont été copiées à partir d'autres feuilles, toutes les valeurs simples, pas de formules.


1 commentaires

Guess Wild: Le code numérique de la valeur d'erreur Excel # N / A est 2042. Je ne sais rien sur XLRD, mais peut-être que cela aide. (Je préfère croire que votre script pense que ...)


4 Réponses :



11
votes

J'ai trouvé cela utile. Merci à l'aide initiale de John. XXX


0 commentaires

5
votes

Comme Andrew listé si vous avez une erreur dans la cellule, XLRD écrit le code de l'erreur, que vous pouvez voir ici : xxx pré>

Code convertit 0x2a de HEX en décembre Vous pouvez obtenir cette valeur 42. Pour éviter que vous puissiez utiliser quelque chose comme celui-ci dans votre code: P>

for rownum in xrange(sh.nrows):
    wr.writerow(['#N/A' if col.ctype == xlrd.XL_CELL_ERROR else col.value for col in sh.row(rownum)])


0 commentaires

1
votes
  • J'ai simplifié la solution, grâce à tout le monde ci-dessus. Tu peux Identifier la cellule d'erreur en fonction du type de cellule.
  • Les données que nous avons est CTYPE de # N / A
  • valeur = 42 (au lieu de # N / A)
  • ctype sera 5

    SIMPLE SOLUTION peut identifier une cellule d'erreur et mettre "Aucun" au lieu de 42 xxx

    xlrd Documentation :

    Vous pouvez identifier tout le autre type basé sur la documentation ci-dessous

    xl_cell_error 5 int Représentant des codes internes Excel; Pour une représentation de texte, reportez-vous au dictionnaire fourni error_text_from_code


0 commentaires