XlsxWriter将日期编号为

时间:2016-10-26 11:53:08

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

Excel中的数字值是我假设的纪元以来的日期,在本例中是1900年1月1日。请参阅here。但是,在实践中,您可能希望使用1899年12月30日来计算闰年。你所要做的就是进行差异检查,然后从时代开始。

假设您的日期是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

答案 1 :(得分: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()

输出:

enter image description here