Цикл for пропускает некоторые ячейки при попытке форматирования с помощью Openpyxl - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня есть этот код, который очищает файл Excel, и все это работает довольно хорошо, но происходит нечто странное, когда некоторые из моих ячеек случайно не обновляют свой стиль.У меня в столбцах 10-12 установлено значение date_style, как определено в моем коде, но иногда ячейки на листе не обновляются.Вот код:

from datetime import datetime
from openpyxl.styles import NamedStyle
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
import openpyxl, os

wb = openpyxl.load_workbook('Opportunities.xlsx', data_only=True)
sheet = wb['OpportunityList']
date_style = NamedStyle(name='datetime', number_format='MM/DD/YYYY')
bold = Font(bold=True)
no_fill = PatternFill(fill_type=None)

print('Deleting row ' + str(sheet.max_row))
sheet.delete_rows(sheet.max_row)

#Loop through the rows and update/delete as needed
for rowNum in range(sheet.max_row, 1, -1):  #start with the last row
    sheet.cell(row = rowNum, column = 10).value = datetime.strptime\
    (sheet.cell(row = rowNum, column = 10).value, '%m/%d/%Y').date()
    sheet.cell(row = rowNum, column = 11).value = datetime.strptime\
    (sheet.cell(row = rowNum, column = 11).value, '%m/%d/%Y').date()
    sheet.cell(row = rowNum, column = 12).value = datetime.strptime\
    (sheet.cell(row = rowNum, column = 12).value, '%m/%d/%Y').date()

    sheet.cell(row = rowNum, column = 10).style = date_style
    sheet.cell(row = rowNum, column = 11).style = date_style
    sheet.cell(row = rowNum, column = 12).style = date_style

    if sheet.cell(row = rowNum, column = 10).value <=\
    datetime.strptime('7/31/2017', "%m/%d/%Y").date():
        print('Deleting row ' + str(rowNum))
        sheet.delete_rows(rowNum)
    if sheet.cell(row = rowNum, column = 4).value ==\
    'Open' and sheet.cell(row = rowNum, column = 11).value <=\
    datetime.strptime('12/31/2016', "%m/%d/%Y").date():
        print('Deleting row ' + str(rowNum))
        sheet.delete_rows(rowNum)
    if sheet.cell(row = rowNum, column = 10).value <\
    sheet.cell(row = rowNum, column = 11).value:
        sheet.cell(row = rowNum, column = 11).value =\
        sheet.cell(row = rowNum, column = 10).value

for rowNum in sheet['1:1']:
    rowNum.font = bold
    rowNum.fill = no_fill

for col in sheet.columns:
     column = col[0].column # Get the column name
     sheet.column_dimensions[column].width = 20

wb.save('Updated_Opportunities.xlsx')

Смотрите скриншот, чтобы понять, о чем я говорю:

enter image description here

Как вы можете видетьнекоторые ячейки поддерживают стиль по умолчанию «гггг-мм-дд», и я не знаю почему.Все 3 столбца изначально являются текстовыми столбцами, поэтому цикл for определенно обновляет их до типа даты, это просто часть формата, которая иногда дает сбой.Обновляются почти все ячейки во всех 3 столбцах, но есть несколько выбросов, и у меня нет объяснения этому.Это не имеет большого значения, но я новичок, поэтому, возможно, я делаю что-то не так в цикле for, не зная.

Заранее спасибо

...