2017-01-03 4 views
0

Ich habe hier Beispielcode, in dem ich die openpyxl-Bibliothek verwenden, um alle .xlsx-Dateien in einem Verzeichnis in eine .csv-Datei zu konvertieren ... aber ich bekomme einen 'AttributeError : 'NoneType' -Objekt hat kein Attribut 'encode' '- Wie kann ich den Code unten anpassen, damit der cell.value nicht codiert wird, wenn es NoneType ist? Vielen Dank.Python Merge Excel zu CSV Unicode-Problem

Antwort

1

Sie müssen explizit für None testen und einen Ersatz, wahrscheinlich eine leere Zeichenfolge verwenden.

c.writerow([b'' if cell is None else cell.value.encode("utf-8") for cell in r]) 
0

Sieht aus wie Sie encode() auf eine leere Zelle aufrufen. Möglicherweise müssen etwas hinzufügen zu überprüfen, ob Zelle Sie keine Wert hinzufügen möchten, ist und bieten eine Alternative Wert Sie es haben wollen umfassen Nicht-Existenz/Leere/noneness einer Zelle darstellen:

for r in sh.rows: 
    newrow = [] 
    for cell in r: 
     if cell.value: 
      newrow += cell.value.encode("utf-8") 
     elif cell.value == None: 
      newrow += '' 
    c.writerow(newrow) 

aber zu halten Die Nice List Ihres Verständnisses an Ort und Stelle könnten wir stattdessen die folgenden:

for r in sh.rows: 
    c.writerow([cell.value.encode("utf-8") if cell.value is not None else '' for cell in r])