如何更改日期列表中的日期格式(并在通过 openpyxl 保存到 excel 时保留该日期格式)?

how do I change date format on a list of dates (and retain that date format when saving to excel via openpyxl)?

此代码:

dateCol = []

for row in ws3.iter_rows(min_col=1, max_col=1, min_row=7, max_row = None):
    for cell in row:        
        dateCol.append((ws3.cell(row=cell.row, column=1).value))

dateCol

生成此列表:

[datetime.datetime(2019, 10, 7, 0, 0),
 datetime.datetime(2019, 10, 3, 0, 0),
 datetime.datetime(2019, 10, 3, 0, 0),
 datetime.datetime(2019, 10, 14, 0, 0),
 datetime.datetime(2019, 10, 15, 0, 0),
...]

在 Excel 中,日期如下所示:

如何将这些日期转换为 mm/dd/yyyy?我一直在努力解决这个问题,如图所示(我可能会尽快删除它,因为它不太明确):

Trying to format dates in column with openpyxl

试试这个,

cell.number_format = 'MM/DD/YYYY'

尝试以下操作:

import datetime
dateCol = [datetime.datetime(2019, 10, 7, 0, 0),
     datetime.datetime(2019, 10, 3, 0, 0),
     datetime.datetime(2019, 10, 3, 0, 0),
     datetime.datetime(2019, 10, 14, 0, 0),
     datetime.datetime(2019, 10, 15, 0, 0)]


dateCol = [dt.strftime('%m/%d/%Y') for dt in dateCol]
print(dateCol)

您还可以更改 excel 日期预览。

谢谢大家。

所以这段代码:

#Change date format in column A
import datetime as dt
dateCol = []

for row in ws3.iter_rows(min_col=1, max_col=1, min_row=7, max_row = None):
    for cell in row:
        dateCol.append((ws3.cell(row=cell.row, column=1).value))

dateCol = [dt.strftime('%m/%d/%Y') for dt in dateCol]
dateCol

输出:

但是当我将它保存到 excel 时:wb3.save('C:\folder\output.xlsx') 我仍然看到:

所以也许使用日期列表不是正确的方法?如果可以,python/openpyxl 是否可以按照 Kostas 的善意建议更改现有工作表的 excel 日期预览?我知道如何在 excel 中手动完成,但选择单元格并更改日期格式,但我需要完全自动化所有这些。

看来我需要使用 python 在列中的单元格上设置此日期格式(在 excel 中):

这可能吗?使用 openyxl 或其他替代方案?

我想通了..终于!在 Excel 不更改日期格式的情况下,我无法获得要保存在 Excel 中的日期列表。然后,我使用 openpyxl iter_rows 遍历单个列中的每个单元格,并对每个单元格应用日期样式。

我在这里学到的教训是,改变列表中的数据然后将其保存到 excel 是不够的。 Excel 将更改日期格式。您必须将 Namedstyle 应用于单元格以更改日期格式而不是更改单元格值。命名样式在此处定义:

https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles-and-named-styles

现在一切都说得通了。

from openpyxl import load_workbook
HISNonLive3 = "C:\folder\input.xlsx"
wb3=load_workbook(HISNonLive3)
ws3 = wb3['Non Live Integ Support Stage']

from openpyxl.styles import NamedStyle
date_style = NamedStyle(name='datetime', number_format='MM/DD/YYYY')
for rows in ws3.iter_rows(min_row=7, max_row=None, min_col=1, max_col=1):
    for cell in rows:
        cell.style = date_style
wb3.save('C:\folder\output.xlsx')

将以下内容写入 excel 工作表:

我使用 openpyxl stlyes 对单元格边框和颜色做了类似的事情。然后我在 openpyxl 样式文档 https://openpyxl.readthedocs.io/en/stable/styles.html:

中注意到了这一点
number_format = 'General'

这就是我需要的线索,如果一个单元格有一个日期或数字值,它可以像颜色或边框一样按样式设置格式。