Почему мои ячейки меняют свой font.size по одному разу при запуске кода? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь сделать функцию "автоматической настройки ячейки" в openpyxl, и она вроде работает нормально. За исключением того, что каждый раз, когда я запускаю приведенный ниже код, размер одной ячейки B изменяется до 10, 11 или 15. На самом деле довольно забавно видеть, как она преобразовывает ячейку в ячейку, не имея представления о том, что происходит, но мне это действительно нужно.

from openpyxl.styles import Font
from datetime import datetime

wb = load_workbook(filename = 'horarios.xlsx')
sheet = wb['Sheet']
sheet["A1"] = "=SUM(1, 1)"

x = 1
while x < 11:
    cell = 'B' + str(x)
    sheet[cell] = str(datetime.now())
    x += 1

x = 1
for row in sheet.values:
    cell = 'Linha ' + str(x)
    print(cell + ":", str(row))
    for value in row:
        print(type(value), value)
    print('')
    x += 1

sheet.move_range("B1:B10", rows=1)
sheet["B1"] = "Os últimos 10 segundos"
sheet.font = Font(size=8)
sheet["B1"].font = Font(size=15, bold=True)

def auto_adjusts_cells(ws):
    dims = {}
    x = 1
    for row in ws.rows:
        height = 0
        for cell in row:
            if cell.value:
                dims[cell.column_letter] = max((dims.get(cell.column_letter, 0), adjust_width(cell)))
            height = max(height, cell.font.size)
        print('Row:', ws.row_dimensions[x].height)
        ws.row_dimensions[x].height = height + 2
        x += 1

    for col, value in dims.items():
        ws.column_dimensions[col].width = value + 1

def adjust_width(cell):    
    value = len(cell.value)
    font_size = cell.font.size

    if font_size > 11:
        font_size -= 10
        font_size = 1 + (font_size / 10)

    elif font_size < 9: 
        font_size = (font_size / 11)

    else:
        font_size = 1

    final = font_size * value
    print('Final:', final, '|', 'Font Size:', font_size, '|', 'Length:', value)

    return final

auto_adjusts_cells(sheet)
wb.save('horarios.xlsx')
...