【问题标题】:openpyxl how to set cell format as Date instead of Customopenpyxl如何将单元格格式设置为日期而不是自定义
【发布时间】:2020-05-22 05:37:04
【问题描述】:

我正在使用 openpyxl 和 pandas 生成 Excel 文件,并且需要在 Excel 中将日期格式化为日期。导出文件中的日期以 dd/mm/yyyy 格式正确格式化,但是当我右键单击一个单元格并转到“格式化单元格”时,它显示自定义,有没有办法更改为日期?这是我指定日期格式的代码。

 writer = pd.ExcelWriter(dstfile, engine='openpyxl', date_format='dd/mm/yyyy')

我也尝试设置cell.number_format = 'dd/mm/yyyy',但仍然在 Excel 中获取自定义格式。

【问题讨论】:

    标签: python pandas datetime openpyxl


    【解决方案1】:

    如果它们在数据框中保存为字符串,您可能必须将它们转换为 python 中的datetime 对象。一种方法是遍历单元格并在使用ExcelWriter 之后执行它:

    cell = datetime.strptime('30/12/1999', '%d/%m/%Y')
    cell.number_format = 'dd/mm/yyyy'
    

    更好的方法是在此之前转换数据框中的该列。为此,您可以在 Pandas 中使用 to_datetime 函数。

    请参阅 this answer 以转换数据框中的整个列。

    【讨论】:

    • 我尝试设置 cell.number_format 但它仍然在单元格格式中显示为自定义
    • @KhalidAmin 您需要将其保存为 datetime 对象,而不是字符串。它是如何在您的数据框中定义的?
    • 我在应用 number_format 之前使用 srptime 将其转换为日期,但它仍然不起作用
    • @KhalidAmin 这很奇怪,您能否更新问题并添加更多代码,以便我们尝试重现错误?当我在这里这样做时,它似乎工作正常。
    【解决方案2】:

    答案可以在Converting Data to Date Type When Writing with Openpyxl的cmets中找到。

    确保将 datetime.datetime 对象写入单元格,然后:

    .number_format = 'mm/dd/yyyy;@'  # notice the ';@'
    

    例如,

    import datetime
    from openpyxl import Workbook
    wb = Workbook()
    ws = wb.active
    ws['A1'] = datetime.datetime(2021, 12, 25)
    ws['A1'].number_format = 'yyyy-mm-dd;@'
    wb.save(r'c:\data\test.xlsx')
    

    n.b.这些日期仍然有点“有趣”,因为它们不会在数据透视表中自动分组为月份和年份(如果你喜欢那种东西)。在数据透视表中,您可以手动单击它们并设置分组:https://support.microsoft.com/en-us/office/group-or-ungroup-data-in-a-pivottable-c9d1ddd0-6580-47d1-82bc-c84a5a340725

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多