2016-06-23 20 views
0

Ich habe ein Exelfile, das ich konvertieren möchte, aber der Standardtyp für Zahlen ist float. Wie kann ich es ändern, so dass xlwings explizit Zeichenfolgen und nicht Zahlen verwendet? DieseWie kann ich jedes Feld als String in xlwings lesen?

ist, wie ich den Wert eines Feldes zu lesen: xw.Range(sheet, fieldname).value

Das Problem ist, dass die Zahlen wie 40-40.0 konvertieren, wenn ich einen String aus, dass erstellen. Ich entferne es mit: str(xw.Range(sheetFronius, fieldname).value).rstrip('0').rstrip('.'), aber das ist nicht sehr hilfreich und führt zu Fehlern, weil manchmal das gleiche Feld sowohl eine Zahl als auch eine Zeichenfolge enthalten kann. (Nicht zur gleichen Zeit, der Wert wird aus einer Liste ausgewählt)

Antwort

2

Mit xlwings, wenn beim Lesen/Schreiben keine Optionen gesetzt sind, werden einzelne Zellen als 'floats' eingelesen. Außerdem werden Zellen mit Zahlen standardmäßig als 'Floats' gelesen. Ich habe die Dokumente durchforstet, aber glaube nicht, dass du eine Zelle mit Zahlen über xlwings in eine 'Zeichenfolge' umwandeln kannst. Glücklicherweise ist alles nicht verloren ...

Sie könnten in den Zellen als 'int' mit xlwings lesen und dann die 'int' in 'string' in Python konvertieren. Die Art und Weise zu tun, ist wie folgt:

xw.Range(sheet, fieldname).options(numbers=int).value 

Und schließlich, Sie in Ihren Daten auf diese Weise (durch die Verpackung der String-Konvertierung in die Optionen im Voraus) lesen:

xw.Range(sheet, fieldname).options(numbers=lambda x: str(int(x))).value 

dann würden Sie nur wandle das in Python in der üblichen Weise in eine Zeichenkette um.

Viel Glück!

+1

Sie können die String-Konvertierung in die Optionen packen: 'xw.Range (Blatt, Feldname) .options (Zahlen = Lambda x: str (int (x))). Wert' –

+0

Danke für die Mühe, aber ich kann verwende es nicht so, weil es in diesem Feld auch eine Zeichenkette geben kann. – simonides

+1

@simonides der Lambda-Ausdruck wird nur auf Zahlen angewendet, Zeichenketten bleiben unberührt. –