2016-06-23 8 views
0

У меня есть exelfile, который я хочу преобразовать, но тип по умолчанию для чисел - float. Как я могу изменить его, так что xlwings явно использует строки, а не числа?Как я могу прочитать каждое поле в виде строки в xlwings?

Это, как я прочитал значение поля: xw.Range(sheet, fieldname).value

Проблема заключается в том, что номера, как 40 преобразуются в 40.0 если я создаю строку из этого. Я разбиваю его на: str(xw.Range(sheetFronius, fieldname).value).rstrip('0').rstrip('.'), но это не очень полезно и приводит к ошибкам, потому что иногда одно и то же поле может содержать как число, так и строку. (Не в то же время, значение выбирается из списка)

ответ

2

С помощью xlwings, если параметры во время операций чтения/записи не заданы, отдельные ячейки считываются как «поплавки». Кроме того, по умолчанию ячейки с числами читаются как «floats». Я просмотрел документы, но не думаю, что вы можете преобразовать ячейку с номерами в строку с помощью xlwings. К счастью, все не потеряно ...

Вы можете прочитать в ячейках как «int» с помощью xlwings, а затем преобразовать «int» в «string» в Python. Способ сделать это состоит в следующем:

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

И, наконец, вы можете прочитать в данных таким образом (путем упаковки преобразование строки в опции первоначальными):

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

Тогда вы бы просто преобразовать это в строку в Python обычным способом.

Удачи вам!

+1

Вы можете упаковать преобразование строки в параметры: 'xw.Range (sheet, fieldname) .options (numbers = lambda x: str (int (x))). Value' –

+0

Спасибо за внимание, но могу 't использовать его таким образом, потому что в этом поле также может быть строка. – simonides

+1

@simonides выражение lambda применяется только к номерам, строки остаются нетронутыми. –