XlsxWriter 将日期写为数字

XlsxWriter writing date as number

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

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

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

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

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

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

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

正如 XlsxWriter 文档中关于 Working with Dates and Times 的解释,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()

输出: