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()
, или ваша собственная функция.
смотрите этот вопрос для некоторых более подробности.