python excel日付デジタル変換datetimeはxls&xslxの2つの異なる方式に対して.md

1802 ワード

注意接尾辞.xlsxはopenpyxlクラスライブラリで処理し、前の.xlsxlrd xlwtで処理すればよい.xlsの読み取り日が数値の場合、変換方法xlrdxldate_as_tupleを用いる処理はdate形式である.
ケースコード:
>>> sheet2.cell(2,2).value #1990/2/22
33656.0

>>> date_value = xlrd.xldate_as_tuple(sheet2.cell_value(2,2),workbook.datemode)
>>> date_value
(1992, 2, 22, 0, 0, 0)

>>> date(*date_value[:3]).strftime('%Y/%m/%d') 
'1992/02/22'

もちろん対応時間フォーマットかどうか判断してみてください
if (sheet.cell(row,col).ctype == 3):
  date_value = xlrd.xldate_as_tuple(sheet.cell_value(rows,3),book.datemode)
  date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')
ctypeに対応する数字の意味
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

しかし、ここで注意してください.あなたのフォーマットがカスタマイズされている可能性があります.excelに日付が表示されている場合、ここで間違いが発生します.得られたctype2で間違いが発生します.私のはこのようにします.だから、この判断はもう一度考えましょう.xlsxの読み取り日が数値の場合、変換方法
このとき使っているクラスライブラリはopenpyxlで、上の使い方とはまた違って、この問題は私を一日検索しました.既存の関数や既存の関数が見つからない場合は、自分で1つしかできません.
具体的な考え方は次のとおりです.
  • 先にexcel実験で2018-11-02に対応する日付タイムスタンプは43406である.
  • 私は2018-11-02で43406を減らしてその年から計算したので、1899-12-30と結論しました.
  • 最後に目標を達成するにはタイムスタンプ+1899-12-30だけで対応する現在の日付
  • に等しい.
    具体的なコード:
    from datetime import date,datetime,timedelta
    
    def get_date(dates):#          ,dates    
        delta=timedelta(days=dates)
        today=datetime.strptime('1899/12/30','%Y/%m/%d')+delta# 1899-12-30                      
        return datetime.strftime(today,'%Y/%m/%d')#         
    

    参照リンク:
  • pythonでxlrd、xlwtを使用してexcelテーブルを操作する詳細
  • python変換excel数値日付が標準日付