2016-08-07 39 views
0

Ich versuche, eine Spalte in einer Excel-Datei zu lesen, und schreibe die Daten in eine entsprechende Textdatei für die Spalte in Python (mit Openpyxl). Einige Daten in der Excel-Datei fehlt, wie die zweite Spalte unter:"nicht unterstützte Operandentyp (en) für /: 'NoneType' und 'float'" in openpyx

"gappy.xlsx":

350.2856445313 -424.5273132324 -322.6161499023 
609.8883056641     -453.6102294922 
780.6325683594     -628.981628418 

Hier ist mein Code:

import openpyxl 

wb = openpyxl.load_workbook('gappy.xlsx', data_only = True) 
ws = wb.active 
factor = 1.0 

for i in range (1,4): 
    with open('text'+str(i)+'.txt', "wt") as file_id: 
     for j in range (1,ws.max_row+1): 
      file_id.write("{:.3e}\n".format(ws.cell(row = j,column = i).value/factor)) 

#  I've also tried this, but I cannot write a file separately for each cloumn ... 
#  for column in ws.columns: 
#   for cell in column: 
#    print(cell.value) 
#    file_id.write('%f\n' % (ws.columns[i][0].value)) 

Dann bekam ich das Fehler:

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

Der Grund ist, dass die Leerzeichen in der 2. Spalte als 'None' gelesen werden. Ich weiß, dass es falsch ist, die zweite Spalte bis 'max_row + 1' zu lesen, aber ich weiß nicht, was ich sonst tun soll. Bitte sagen Sie mir, wie Sie das beheben können. Vielen Dank im Voraus.

Antwort

1

Nun können Sie überprüfen, dass beide Argumente keine None vor der Division sind. Und wenn man None ist, behandeln Sie es in jeder gewünschten Weise.

So etwas wie dieses

if ws.cell(row = j,column = i).value is not None and factor is not None: 
    file_id.write("{:.3e}\n".format(ws.cell(row = j,column = i).value/factor)) 
else: 
    # handle it in a different fashion 
+0

Es funktioniert. Ich habe file_id.write ('None \ n') unter der else-Anweisung hinzugefügt. Ich danke dir sehr! – IanHacker