如何在Excel中使用openpyxl格式化'yyyy-mm-dd hh:mm:ss'格式的日期时间单元格

17 投票
6 回答
69273 浏览
提问于 2025-04-18 10:47

所以,给定的内容是:

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

在Excel中,结果是正确的日期和时间被写入了单元格(你可以在输入公式的地方看到它)。但是,单元格的显示格式只有MM/DD/YYYY。

我希望单元格显示为“6/23/2014 13:56”,而不仅仅是“6/23/2014”。

我该如何明确地格式化单元格来实现这个呢?

谢谢!

编辑

@alecxe 这个解决方案有效,正是我所需要的。我希望能够像@Woodham的解决方案那样保存样式。不幸的是,这引发了一个类型错误(见评论)。有什么建议吗?

6 个回答

1

我发现这样做有效。虽然使用了number_format,但在放入Excel工作簿时,它似乎能识别指定的日期格式。

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'
1

在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
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

更新: Style 类现在不再使用了,想要解决这个问题可以参考这个 回答

22

在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

另外,使用新的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

24

格式化单元格最简单的方法就是使用 .number_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) 中测试过的。

撰写回答