关于将日期导出为日期的 xlsxWriter 问题

xlsxWriter issue regarding exporting dates as dates

我有一个列表,其中包含以下格式的日期:11/22/2019。 当我将此列表导出到 Excel 时,Excel sheet 将这些日期识别为常规日期,因此我无法对这些日期进行排序。有没有办法在不使用 VBA 的情况下让 Excel 将这些日期识别为日期?

import xlsxwriter
workbook = xlsxwriter.Workbook('C:/test.xlsx')
worksheet = workbook.add_worksheet("Table 1")

dates_array = ["02/12/1999", "04/12/2009", "11/02/2019"]
# Export dates_array to Excel file
row = 0
column = 0
for item in dates_array:
    worksheet.write(row, column, item)
    row += 1
workbook.close() 

下面的代码对我有用,但我无法解释为什么 Excel 在手动输入时识别某些日期格式,但在使用 xlsxwriter 输入时将这些格式保留为文本。

import xlsxwriter
workbook = xlsxwriter.Workbook('C:/test.xlsx')
worksheet = workbook.add_worksheet("Table 1")

dates_array = [" 02/30/1999", "04/12/2009", "11/02/2019"]
# Export dates_array to Excel file
row = 0
column = 0
for item in dates_array:
    worksheet.write(row, column, item)
    format = workbook.add_format({'num_format': 'm/d/yyyy'})
    worksheet.write(row,column, item, format)      
    row += 1
workbook.close() 

严格来说这些不是日期,它们只是看起来像日期的字符串。您需要将它们转换为日期,在 Python 中通常是日期时间对象,在 Excel 中是实数 + 格式。

XlsxWriter 可以将 Python 日期时间对象转换为 Excel 日期,但它不会自动将类似日期的字符串转换为 Excel 日期。这在 XlsxWriter 文档的 Working with Dates and Times 部分有更详细的解释。

以下是如何转换它们的示例:

from datetime import datetime
import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet("Table 1")

dates_array = ["02/12/1999", "04/12/2009", "11/02/2019"]
date_format = workbook.add_format({'num_format': 'mm/dd/yyyy'})

# Set the column width for clarity.
worksheet.set_column(0, 0, 20)

row = 0
column = 0
for item in dates_array:

    date_time = datetime.strptime(item, '%m/%d/%Y')

    worksheet.write(row, column, date_time, date_format)
    row += 1

workbook.close()

像上面一样,单元格格式会覆盖列格式,因此如果您想设置列格式,则可以省略单元格格式,如下所示:

worksheet.set_column(0, 0, 20, date_format)

row = 0
column = 0
for item in dates_array:

    date_time = datetime.strptime(item, '%m/%d/%Y')

    worksheet.write(row, column, date_time)
    row += 1

workbook.close()

最后,如果您还想将垂直对齐方式添加到列格式中,您可以将其添加到日期格式中,如下所示:

date_format = workbook.add_format({'num_format': 'mm/dd/yyyy', 
                                   'align': 'vcenter'})