关于将日期导出为日期的 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'})
我有一个列表,其中包含以下格式的日期: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'})