【问题标题】:XlsxWriter writing date as numberXlsxWriter 将日期写入数字
【发布时间】:2017-03-08 18:41:31
【问题描述】:

我正在将日期写入文件并且我正在使用:

date.strftime('%m/%d/%Y')

我正在将日期对象写入 excel 文件:

worksheet.write(row_count, column_count, r, formatter)

其中formatter 将其对齐在中间,r 是当前循环中的对象。

它显示为10/28/2016,但我希望将其保存为数字值(例如42871)。有没有办法在代码中发生这种情况而不是在 excel 中手动发生?

【问题讨论】:

    标签: python excel python-3.x date xlsxwriter


    【解决方案1】:

    正如Working with Dates and Times 上的 XlsxWriter 文档中所述,Excel 中的日期只是一个带有格式的数字。如果省略格式,则会得到数字:

    from datetime import datetime
    import xlsxwriter
    
    workbook = xlsxwriter.Workbook('datetimes.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Widen the first column so that the dates are visible.
    worksheet.set_column('A:A', 20)
    
    # Create a datetime object.
    date_time = datetime.strptime('2017-05-16', '%Y-%m-%d')
    
    # Create a format for the date or time.
    date_format = workbook.add_format({'num_format': 'd mmmm yyyy'})
    
    worksheet.write('A1', date_time, date_format)
    worksheet.write('A2', date_time             )
    
    workbook.close()
    

    输出:

    【讨论】:

    • 此解决方案有效。问题是我在写之前格式化了日期,当我写它时自动写为%m/%d/%Y
    【解决方案2】:

    Excel 中的数值是我假设自纪元以来的天数,在本例中为 1900 年 1 月 1 日。请参阅 here。但是,在实践中,您可能希望使用 1899 年 12 月 30 日来计算闰年。您所要做的就是运行一个差异检查,然后从 epoch 中获取日期。

    假设您的日期是 2016 年 10 月 28 日:

    >>> from datetime import date
    >>> new_value = (date(2016,10,28) - date(1899,12,30)).days
    42671
    

    因此,在编写行之前,只需进行一些前期计算:

    new_value = (your_date_in_the_row - date(1899,12,30)).days
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2017-03-30
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多