如何更改日期列表中的日期格式(并在通过 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'
这就是我需要的线索,如果一个单元格有一个日期或数字值,它可以像颜色或边框一样按样式设置格式。
此代码:
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'
这就是我需要的线索,如果一个单元格有一个日期或数字值,它可以像颜色或边框一样按样式设置格式。