Я пытаюсь сделать функцию "автоматической настройки ячейки" в 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')