だから、与えられた:
dttm = datetime.datetime.strptime("2014-06-23 13:56:30", "%Y-%m-%d %H:%M:%S")
ws['A1'] = dttm
Excelでの結果は、正しい日時がセルに書き込まれることです(数式を入力した場所で確認できます)。ただし、セルの表示形式はMM/DD/YYYYのみです。
セルを「2014年6月23日」ではなく「2014年6月23日13時56分」のように表示する必要があります。
これを実現するためにセルを明示的にフォーマットするにはどうすればよいですか?
ありがとう!
@alecxeこのソリューションは機能し、まさに私が求めていたものです。 @Woodhamによるソリューションのようなスタイルを保存できるようにしたいと思います。残念ながら、typeErrorが発生します(コメントを参照)。助言がありますか?
上記にコメントを追加するのに十分な評判がないので、これを新しい回答として追加します。セルをフォーマットする最も簡単な方法は、次のように.number_format = "format"を使用することです。
value = datetime.datetime.strptime("2014-06-23 13:56:30", "%Y-%m-%d %H:%M:%S")
cell = ws['A1']
cell.value = value
cell.number_format = 'YYYY MMM DD'
これはopenpyxl(2.2.2)でテストされています
Openpyxl 2.4.5の場合、NumberFormat
とStyle
にアクセスできなくなり、NamedStyle
を使用する必要があります。使用例を次に示します。
from openpyxl.styles import NamedStyle
date_style = NamedStyle(name='datetime', number_format='DD/MM/YYYY HH:MM:MM')
ws['A1'].style = date_style
または、新しいNamedStyle
クラスを使用すると、NamedStyle
がインスタンス化されたら、文字列名でスタイルを設定できます。
from openpyxl.styles import NamedStyle
NamedStyle(name='custom_datetime', number_format='DD/MM/YYYY HH:MM:MM')
ws['A1'].style = 'custom_datetime'
ここのドキュメント: https://openpyxl.readthedocs.io/en/stable/styles.html
_format_code
_を手動で設定できます。
_value = datetime.datetime.strptime("2014-06-23 13:56:30", "%Y-%m-%d %H:%M:%S")
cell = ws['A1']
cell.value = value
cell.style.number_format.format_code = 'MM/DD/YY HH:MM'
_
または、セルで_set_number_format()
メソッドを呼び出すこともできます。
_cell._set_number_format('MM/DD/YY HH:MM')
_
セルに_ws._styles
_を設定することにより、スタイルを定義して再利用することもできます。
_from openpyxl.styles import NumberFormat, Style
...
style = Style()
style.number_format = NumberFormat()
style.number_format.format_code = 'MM/DD/YY HH:MM'
ws['A1'] = value
ws._styles['A1'] = style
_
テスト済み-私のために働いた。
フォーマットするセルにopenpyxl.styles.Style
を設定する必要があると思います。
ここのドキュメント を見ると、次のようなものが機能するはずです:
dttm = datetime.datetime.strptime("2014-06-23 13:56:30", "%Y-%m-%d %H:%M:%S")
s = Style(number_format=NumberFormat('dd-mm-yyyy h:mm:ss'))
ws['A1'] = dttm
ws['A1'].styles = s
更新:スタイルクラスは使用されなくなりました。解決策については、これを参照してください answer 。
Openpyxl 2.3.4の場合、NumberFormatはインポートできませんが、次のコードはスタイルを設定するために機能します。
from openpyxl.styles import Style
…
date_style = Style(number_format="DD/MM/YYYY HH:MM:MM")
ws['A1'].style = date_style
私はこれがうまくいったことを発見しました。 number_formatが使用されていますが、Excelwbに入力されたときに指定された日付形式を認識しているようです。
import datetime
date = datetime.date(2020, 2, 24) # python datetime format is yyyy mm dd
ws.cell(row=[row_ref], column=[col_ref], value=date)
ws.cell(row=[row_ref], column=[col_ref]).number_format = 'dd/mm/yy'