如何使用openpyxl在Excel中使用'yyyy-mm-dd hh:mm:ss'形式的datetime对象格式化单元格

Mot*_*tyl 5 python excel openpyxl

所以,给定:

dttm = datetime.datetime.strptime("2014-06-23 13:56:30", "%Y-%m-%d %H:%M:%S")
ws['A1'] = dttm
Run Code Online (Sandbox Code Playgroud)

excel的结果是将正确的日期时间写入单元格(您可以在输入公式的位置看到它).但是,单元格显示格式仅为MM/DD/YYYY.

我需要单元格显示"6/23/2014 13:56"而不是"6/23/2014".

如何明确格式化单元格以实现此目的?

谢谢!

编辑

@alecxe这个解决方案有效,正是我要求的.我希望能够像@Woodham一样保存解决方案.不幸的是,它引发了一个typeError(请参阅注释).有什么建议?

Sco*_*rts 13

我将此添加为新答案,因为我没有足够的声誉来为上面添加评论.格式化单元格的最简单方法是使用.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'
Run Code Online (Sandbox Code Playgroud)

这是在openpyxl(2.2.2)中测试的


que*_*luz 7

对于openpyxl 2.4.5,您将不再有权使用,NumberFormatStyle必须使用NamedStyle。以下是一些示例用法:

from openpyxl.styles import NamedStyle

date_style = NamedStyle(name='datetime', number_format='DD/MM/YYYY HH:MM:MM')
ws['A1'].style = date_style
Run Code Online (Sandbox Code Playgroud)

另外,对于新NamedStyle类,可以NamedStyle在实例化字符串后通过字符串名称设置样式:

from openpyxl.styles import NamedStyle

NamedStyle(name='custom_datetime', number_format='DD/MM/YYYY HH:MM:MM')
ws['A1'].style = 'custom_datetime'
Run Code Online (Sandbox Code Playgroud)

此处的文档:https : //openpyxl.readthedocs.io/en/stable/styles.html


Woo*_*ham 2

我相信您需要在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
Run Code Online (Sandbox Code Playgroud)

更新: 不再使用样式类,解决方案请参阅此答案