Квот документация :
Даты в таблицах Excel
На самом деле таких вещей нет.У вас есть числа с плавающей запятой и благочестивая надежда.С датами Excel есть несколько проблем:
(1) Даты не сохраняются как отдельный тип данных;они хранятся в виде чисел с плавающей запятой, и вы должны полагаться (а) на «формат чисел», применяемый к ним в Excel, и / или (б) знать, в каких ячейках должны быть даты.Этот модуль помогает с (a) проверкой формата, который был применен к каждой числовой ячейке;если это формат даты, ячейка классифицируется как дата, а не как число.Мы будем признательны за отзывы об этой функции, особенно из не говорящих по-английски языков.
(2) Excel для Windows по умолчанию сохраняет даты как количество дней (или их часть) с 1899-12-31T00: 00: 00.Excel для Macintosh использует дату начала по умолчанию 1904-01-01T00: 00: 00.Система дат может быть изменена в Excel для каждой книги (например: Инструменты -> Параметры -> Расчет, отметьте поле «Система дат 1904»).Это, конечно, плохая идея, если в рабочей книге уже есть даты.Нет веских причин для его изменения, даже если в рабочей книге нет дат.Какая система дат используется, записана в рабочей книге.Рабочая книга, перенесенная из Windows в Macintosh (или наоборот), будет корректно работать с хостом Excel.При использовании функции xldate_as_tuple этого модуля для преобразования чисел из рабочей книги необходимо использовать атрибут datemode объекта Book.Если вы угадываете или выносите суждение в зависимости от того, где, по вашему мнению, была создана рабочая книга, вы рискуете оказаться на расстоянии 1462 дня.
Ссылка: http://support.microsoft.com/default.aspx?scid=KB;EN-US;q180162
(3)Внедрение в Excel системы дат по умолчанию на базе Windows 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, и вы не слишком заботитесь о точности, как отмечалось выше, этот код должен работать.