Ответ 1
Quoth документация:
Даты в электронных таблицах Excel
На самом деле таких вещей нет. У вас есть с плавающей запятой цифр и набожной надежды. Есть несколько проблем с датами Excel:
(1) Даты не сохраняются как отдельные тип данных; они хранятся как плавающие и вы должны полагаться на (а) "формат номера", применяемый к их в Excel и/или (b) зная, какие предполагается, что ячейки должны иметь даты в их. Этот модуль помогает с (а) проверки формата, который был применяется к каждой числовой ячейке; если оно представляется форматом даты, ячейка классифицируется как дата, а не номер. Обратная связь по этой функции, особенно от неанглоязычных локали, будут оценены.
(2) Excel для Windows хранит даты по по умолчанию - количество дней (или его фракции), поскольку 1899-12-31T00: 00: 00. Excel для Macintosh использует начальную дату по умолчанию 1904-01-01T00: 00: 00. Система даты могут быть изменены в Excel на для каждой рабочей книги (например: Инструменты → Параметры → Расчет, отметьте поле "Система дат 1904" ). Это конечно, плохая идея, если уже есть даты в книге. Здесь нет повод для его изменения, даже если в книге нет дат. Который используемая дата, записывается в книги. Переведенная книга от Windows до Macintosh (или наоборот) versa) будет корректно работать с хост Excel. При использовании этого модуля Функция xldate_as_tuple для преобразования номера из книги, вы должны использовать атрибут datemode книги объект. Если вы догадались или в зависимости от того, где вы верьте, что книга создана, вы рискует потерять 1462 дня из исправность.
Ссылка: http://support.microsoft.com/default.aspx?scid=KB;EN-US;q180162
(3) Реализация Excel в Система дат, основанная на Windows-default 1900 работает над неправильной предпосылкой, что 1900 год был високосным. Он интерпретирует число 60 как значение 1900-02-29, который не является действительной датой. Следовательно, любое число меньше 61 является неоднозначным. Пример: 59 результат 1900-02-28 введен непосредственно, или это 1900-03-01 минус 2 дня? Программа OpenOffice.org Calc "исправляет" проблема Microsoft; входящий 1900-02-27 вызывает число 59 сохраняются. Сохраните файл XLS, затем откройте файл с Excel - вы увидите Отображено 1900-02-28.
Ссылка: http://support.microsoft.com/default.aspx?scid=kb;en-us;214326
который я цитирую здесь, потому что ответ на ваш вопрос, вероятно, будет неправильным, если вы не учтете это.
Таким образом, для этого в код будет что-то вроде:
import datetime
import xlrd
book = xlrd.open_workbook("myfile.xls")
sheet = book.sheet_by_index(0)
cell = sheet.cell(5, 19) # type, <class 'xlrd.sheet.Cell'>
if sheet.cell(5, 19).ctype == 3: # 3 means 'xldate' , 1 means 'text'
ms_date_number = sheet.cell_value(5, 19) # Correct option 1
ms_date_number = sheet.cell(5, 19).value # Correct option 2
year, month, day, hour, minute, second = xlrd.xldate_as_tuple(ms_date_number,
book.datemode)
py_date = datetime.datetime(year, month, day, hour, minute, nearest_second)
который дает вам дату и время Python в py_date
, что вы можете делать полезные операции при использовании стандартного модуля datetime.
Я никогда не использовал xlrd, и мой пример полностью составлен, но если есть myfile.xls
, и у него действительно есть номер даты в ячейке F20, и вы не слишком суетливы относительно точности, как указано выше, этот код должен работать.