python excel日付デジタル変換datetimeはxls&xslxの2つの異なる方式に対して.md
1802 ワード
注意接尾辞
ケースコード:
もちろん対応時間フォーマットかどうか判断してみてください
しかし、ここで注意してください.あなたのフォーマットがカスタマイズされている可能性があります.excelに日付が表示されている場合、ここで間違いが発生します.得られた
このとき使っているクラスライブラリは
具体的な考え方は次のとおりです.先にexcel実験で2018-11-02に対応する日付タイムスタンプは43406である. 私は2018-11-02で43406を減らしてその年から計算したので、1899-12-30と結論しました. 最後に目標を達成するにはタイムスタンプ+1899-12-30だけで対応する現在の日付 に等しい.
具体的なコード:
参照リンク: pythonでxlrd、xlwtを使用してexcelテーブルを操作する詳細 python変換excel数値日付が標準日付
.xlsx
はopenpyxlクラスライブラリで処理し、前の.xls
はxlrd xlwt
で処理すればよい.xls
の読み取り日が数値の場合、変換方法xlrd
のxldate_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に日付が表示されている場合、ここで間違いが発生します.得られた
ctype
が2
で間違いが発生します.私のはこのようにします.だから、この判断はもう一度考えましょう.xlsx
の読み取り日が数値の場合、変換方法このとき使っているクラスライブラリは
openpyxl
で、上の使い方とはまた違って、この問題は私を一日検索しました.既存の関数や既存の関数が見つからない場合は、自分で1つしかできません.具体的な考え方は次のとおりです.
具体的なコード:
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')#
参照リンク: