Проблема xlsxWriter относительно экспорта дат как дат - PullRequest
1 голос
/ 09 ноября 2019

У меня есть список, включающий даты в следующем формате: 22.11.2009. Когда я экспортирую этот список в Excel, лист Excel распознает эти даты как Общие, и поэтому я не могу отсортировать по этим датам. Есть ли способ сделать эти даты узнаваемыми в Excel как даты без использования VBA?

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() 

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Строго говоря, это не даты, это просто строки, похожие на даты. Вам необходимо преобразовать их в даты, которые в Python обычно являются объектами datetime, а в Excel - вещественными числами + форматами.

XlsxWriter может конвертировать объекты даты и времени Python в даты Excel, но он не выполняет автоматическое преобразование строк, похожих на даты, в даты Excel. Это объясняется более подробно в разделе Работа с датами и временем в документации XlsxWriter.

Вот пример того, как вы можете их преобразовать:

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'})

1 голос
/ 09 ноября 2019

Код ниже работает для меня, но я не могу объяснить, почему 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() 
...