Как изменить формат даты в списке дат (и сохранить этот формат даты при сохранении в Excel через openpyxl)? - PullRequest
1 голос
/ 18 октября 2019

Этот код:

dateCol = []

for row in ws3.iter_rows(min_col=1, max_col=1, min_row=7, max_row = None):
    for cell in row:        
        dateCol.append((ws3.cell(row=cell.row, column=1).value))

dateCol

Создает этот список:

[datetime.datetime(2019, 10, 7, 0, 0),
 datetime.datetime(2019, 10, 3, 0, 0),
 datetime.datetime(2019, 10, 3, 0, 0),
 datetime.datetime(2019, 10, 14, 0, 0),
 datetime.datetime(2019, 10, 15, 0, 0),
...]

В Excel даты выглядят так:

enter image description here

Как преобразовать эти даты в мм / дд / гггг? Я боролся с этим, как показано в (который я могу удалить, как только он станет менее точным):

Попытка отформатировать даты в столбце с помощью openpyxl

Ответы [ 5 ]

2 голосов
/ 18 октября 2019

Попробуйте следующее:

import datetime
dateCol = [datetime.datetime(2019, 10, 7, 0, 0),
     datetime.datetime(2019, 10, 3, 0, 0),
     datetime.datetime(2019, 10, 3, 0, 0),
     datetime.datetime(2019, 10, 14, 0, 0),
     datetime.datetime(2019, 10, 15, 0, 0)]


dateCol = [dt.strftime('%m/%d/%Y') for dt in dateCol]
print(dateCol)

Также вы можете изменить предварительный просмотр даты Excel.

1 голос
/ 18 октября 2019

Попробуйте,

cell.number_format = 'MM/DD/YYYY'
0 голосов
/ 18 октября 2019

Я понял это .. наконец! Я не мог получить список дат для сохранения в Excel без изменения формата даты в Excel. Затем я использовал openpyxl iter_rows, чтобы перебрать каждую ячейку в одном столбце и применить стиль даты к каждой ячейке.

Урок, который я усвоил здесь, заключается в том, что недостаточно изменить данные в списке, а затем сохранить их в Excel. Excel изменит формат даты. Вы должны применить Namedstyle к ячейке, чтобы изменить формат даты, а не изменить значение ячейки. Именованные стили определены здесь:

https://openpyxl.readthedocs.io/en/stable/styles.html#cell-styles-and-named-styles

Теперь все это имеет смысл.

from openpyxl import load_workbook
HISNonLive3 = "C:\\folder\\input.xlsx"
wb3=load_workbook(HISNonLive3)
ws3 = wb3['Non Live Integ Support Stage']

from openpyxl.styles import NamedStyle
date_style = NamedStyle(name='datetime', number_format='MM/DD/YYYY')
for rows in ws3.iter_rows(min_row=7, max_row=None, min_col=1, max_col=1):
    for cell in rows:
        cell.style = date_style
wb3.save('C:\\folder\\output.xlsx')

записывает в таблицу Excel следующее:

enter image description here

Я сделал нечто подобное с границами ячеек и цветами, используяopenpyxl stlyes. Затем я заметил это в стиле openpyxl doc https://openpyxl.readthedocs.io/en/stable/styles.html:

number_format = 'General'

Это был ключ, который мне нужен, что если ячейка имеет значение даты или числа, она может быть отформатирована в стиле, таком как цвета или границы.

0 голосов
/ 18 октября 2019

Кажется, мне нужно использовать python, чтобы установить форматирование даты (в Excel) для ячеек в столбце:

enter image description here

Этовозможно? С openyxl или какой-то альтернативой?

0 голосов
/ 18 октября 2019

Спасибо, ребята.

Итак, этот код:

#Change date format in column A
import datetime as dt
dateCol = []

for row in ws3.iter_rows(min_col=1, max_col=1, min_row=7, max_row = None):
    for cell in row:
        dateCol.append((ws3.cell(row=cell.row, column=1).value))

dateCol = [dt.strftime('%m/%d/%Y') for dt in dateCol]
dateCol

выводит:

enter image description here

Но когдаЯ сохраняю его в Excel с помощью: wb3.save ('C: \ folder \ output.xlsx'). Я все еще вижу:

enter image description here

Так что, возможно, используясписок дат не правильный подход? Если да, может ли python / openpyxl изменить предварительный просмотр даты Excel для существующего рабочего листа, как любезно предлагает Костас? Я знаю, как сделать это вручную в Excel, но выбирая ячейки и меняя формат даты, но мне нужно полностью автоматизировать все это.

...