Как использовать “ xlrd.xldate_as_tuple () “

Я не совсем уверен, как использовать следующую функцию:

xlrd.xldate_as_tuple 

для следующих данных

 xldate:39274.0 xldate:39839.0 

Может ли кто-нибудь, пожалуйста, привести пример использования этой функции для данных?

  • Как определить, является ли ячейка пустой при чтении файлов Excel с использованием библиотеки xlrd?
  • Редактируйте существующие книги и листы excel с xlrd и xlwt
  • Есть ли способ закрыть книгу с помощью xlrd
  • Как получить свойства ячейки Excel в Python
  • Получение URL гиперссылки из документа Excel
  • Значение Python xlrd Named Range
  • Как получить имена листов из файлов XLS без загрузки всего файла?
  • Чтение объекта Excel, полученного с помощью urllib2
  • 5 Solutions collect form web for “Как использовать “ xlrd.xldate_as_tuple () “”

    Введите документацию :

    Даты в таблицах Excel

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

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

    (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 неоднозначно. Пример: есть результат 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) 

    который дает вам py_date время Python в py_date что вы можете делать полезные операции при использовании стандартного модуля datetime .

    Я никогда не использовал xlrd, и мой пример полностью составлен, но если есть myfile.xls и у него действительно есть номер даты в ячейке F20, и вы не слишком суетливы относительно точности, как указано выше, этот код должен Работа.

    Документация функции (за вычетом списка возможных исключений):

    xldate_as_tuple (xldate, datemode) [#]

     Convert an Excel number (presumed to represent a date, a datetime or a time) into a tuple suitable for feeding to datetime or mx.DateTime constructors. xldate The Excel number datemode 0: 1900-based, 1: 1904-based. WARNING: when using this function to interpret the contents of a workbook, you should pass in the Book.datemode attribute of that workbook. Whether the workbook has ever been anywhere near a Macintosh is irrelevant. Returns: Gregorian (year, month, day, hour, minute, nearest_second). 

    Как автор xlrd, мне интересно узнать, как можно улучшить документацию. Не могли бы вы ответить на них:

    Вы читали общий раздел о датах (цитируется @msw)?
    Прочитали ли вы вышеупомянутую конкретную документацию функции?
    Можете ли вы предложить какие-либо улучшения в документации?
    Вы на самом деле пытались запустить функцию, например:

     >>> import xlrd >>> xlrd.xldate_as_tuple(39274.0, 0) (2007, 7, 11, 0, 0, 0) >>> xlrd.xldate_as_tuple(39274.0 - 1.0/60/60/24, 0) (2007, 7, 10, 23, 59, 59) >>> 

    Используйте его как таковое :

     number = 39274.0 book_datemode = my_book.datemode year, month, day, hour, minute, second = xldate_as_tuple(number, book_datemode) 
     import datetime as dt import xlrd log_dir = 'C:\\Users\\' infile = 'myfile.xls' book = xlrd.open_workbook(log_dir+infile) sheet1 = book.sheet_by_index(0) date_column_idx = 1 ## iterate through the sheet to locate the date columns for rownum in range(sheet1.nrows): rows = sheet1.row_values(rownum) ## check if the cell is a date; continue otherwise if sheet1.cell(rownum, date_column_idx).ctype != 3 : continue install_dt_tuple = xlrd.xldate_as_tuple((rows[date_column_idx ]), book.datemode) ## the "*date_tuple" will automatically unpack the tuple. Thanks mfitzp :-) date = dt.datetime(*date_tuple) 

    Вот что я использую для автоматического преобразования дат:

     cell = sheet.cell(row, col) value = cell.value if cell.ctype == 3: # xldate value = datetime.datetime(*xlrd.xldate_as_tuple(value, workbook.datemode)) 
    Python - лучший язык программирования в мире.