Почему xlrd читает номер формата текста как число с плавающей запятой? - PullRequest
0 голосов
/ 21 декабря 2018

Я использую xlrd для обработки некоторых данных в Excel.

У меня есть три одинаковых числовых данных «123» в столбце.

Первая ячейка отформатирована как текст, вторая ячейка отформатирована как общая, а последняя - как первая.

Я отредактировал последнюю ячейку, просто дважды щелкнул и не изменилчто-нибудь.Итак, я получил советы по проверке ошибок (маленький зеленый треугольник) в последней ячейке: «Число в этой ячейке отформатировано как текст или перед ним апостроф.

Я сохраняю свой файл Excel и запускаю свой код:

excel = xlrd.open_workbook(MyExcelName)
for sheet in excel.sheets():
    for i in range(sheet.nrows):
       for jin range(len(sheet.row_values(i))):
          value=str(sheet.row_values(i)[j])
          print(value)
...

И я получаю это:

123.0

123.0

123

Это означает xlrd прочитанное число в текстовом форматекак поплавок.

Но что меня озадачивает, так это то, что третья клетка не была прочитана как поплавок.

Как это произошло?Я имею в виду, все это отформатировано как текст, xlrd будет проверять ошибки Советы?Почему бы просто не проверить формат ячейки, прочитать текст как строку?

1 Ответ

0 голосов
/ 21 декабря 2018

Форматирование в Excel всегда чисто косметическое и является атрибутом, который хранится отдельно и независимо от значения ячейки.Значение и формат do not должны быть "синхронизированы".

Автор xlrd сделал выбор в всегда , просто предоставив вам значение, которое было сохраненоExcel.Не важно что.Вот и вся история со стороны xlrd.

Программа Excel (то есть приложение с графическим интерфейсом от Microsoft) более сложна.Если вы наберете что-то похожее на число, то Excel проверит существующий формат ячейки.Если формат ячейки - Текст, он будет хранить строку.В противном случае он будет сохранять число с плавающей запятой.

Если вы начнете с чистого листа в Excel, все ячейки будут иметь формат по умолчанию, который является общим.Важно отметить, что General - это не текст, поэтому, если вы введете 123 в ячейки A1, A2 и A3 на этом чистом листе, все они будут сохранены как плавающие.

Если вы затем вернетесь и отформатируете A1и A3 как Текст, Excel изменит формат этих ячеек на Текст.На этом этапе значения всех трех ячеек по-прежнему плавают.

Но если вы затем edit A3, Excel проверит формат ячейки и обнаружит, чтоэто текст, и, таким образом, сохраните строку.

Обратите внимание, что если значение для A3 является строкой, если вы затем вернетесь назад и отформатируете A3 как General, значение остается строкой, несмотря на то, что General - это не текст.

Так что любая забавная связь между значениями, типами и форматированием происходит из-за Excel и того, как вы вводите данные.xlrd просто верно читает то, что там есть.

...