Python xlrd читать как строку

У меня возникли трудности с чтением определенного значения ячейки из Excel в xlrd. Любое значение, которое я читаю (значение даты), преобразуется в число. Я знаю, что есть решения для преобразования его в формат даты python, но могу ли я напрямую прочитать строковое значение в xlrd?

3 ответов


xlrd не преобразует даты в float. Excel хранит даты как поплавки.

цитирую документация xlrd (прокрутите вниз страницу):

даты в электронных таблицах Excel

на самом деле таких вещей нет. То, что вы с плавающей точкой числа и благочестивая Надежда. Есть несколько проблем с датами в Excel:

(1) даты не хранятся отдельно тип данных, они хранятся как плавать номера точек и вы должны полагаться на а) "числовой формат", применяемый к их в Excel и / или (b) зная, какие в ячейках должны быть даты их. Этот модуль помогает с (а) проверка формата, который был применяется к каждой ячейке номера; если это выглядит как формат даты, ячейка классифицируется как дата, а не число.

(2) ... При использовании этого пакета xldate_as_tuple() функции для преобразования числа из книги, вы должны использовать


ну как тебе сказать:

# reading from a xls file (no .xlsx files, no writing!)
import xlrd  # install xlrd from  http://pypi.python.org/pypi/xlrd

wb = xlrd.open_workbook("YOUR_FILE.xls")  # xls file to read from
sh1 = wb.sheet_by_index(0) # first sheet in workbook
sh2 = wb.sheet_by_name('colors') # sheet called colors

# print all rows in first sheet
print "content of", sh1.name # name of sheet
for rownum in range(sh1.nrows): # sh1.nrows -> number of rows (ncols -> num columns) 
    print sh1.row_values(rownum)

# rowx and colx (x for Excel) start at 1!
print "row3 col 2:", sh1.cell(rowx=3,colx=2).value

col = sh1.col_values(0)  # column 0 as a list of string or numbers
print '"A" column content:' # python index 0, 1.colunm, called A 
for cell in col: print cell
print sh1.col_values(1) # 2. column, note mix of string (header) and numbers!

для этого примера XLS:

лист 1:листинг

name            latitude longitude   status  color   date
Mount Hood      45.3736  121.6925    active  red     01-ene-01
Mount Jefferson 44.6744  121.7978   dormant yellow  23-sep-05
Three-Fingered  44.478   121.8442   extinct green   
Mount Washington 4.3325  121.8372   extinct green   
South Sister    44.1036  121.7681   active  red 
Diamond Peak    43.5206  122.1486   extinct green   
Mount Thielsen  43.1531  122.0658   extinct green   
Mount Scott     42.923   122.0163   dormant yellow  
Mount McLoughlin 2.445   122.3142   dormant yellow  

лист 2:цвета

status  color
active  red
dormant yellow
extinct green

Excel хранит даты как числа как внутри, так и внутри .xls файлы, а затем форматирует их соответственно при отображении. Таким образом, если Вы читаете их наивно с xlrd, вы получите либо цифры или строки. Что вам нужно сделать, это проверить, какой тип ячейки, а затем преобразовать число самостоятельно. Либо с помощью xlrdвстроенные функции, такие как xldate_as_tuple(), или ваша собственная функция.

смотрите этот вопрос для некоторых более подробности.