Python-автоматическая настройка ширины столбцов файла excel

Новичок-у меня есть скрипт Python, который регулирует ширину разных столбцов файла excel в соответствии с указанными значениями:

import openpyxl
from string import ascii_uppercase

newFile = "D:Excel Filesabc.xlsx"

wb = openpyxl.load_workbook(filename = newFile)        
worksheet = wb.active

for column in ascii_uppercase:
    if (column=='A'):
        worksheet.column_dimensions[column].width = 30
    elif (column=='B'):
        worksheet.column_dimensions[column].width = 40            
    elif (column=='G'):
        worksheet.column_dimensions[column].width = 45            
    else:
        worksheet.column_dimensions[column].width = 15

wb.save(newFile)

есть ли способ, с помощью которого мы можем настроить ширину каждого столбца до его наиболее оптимального значения, не явно указывая его для разных столбцов (означает, без использования этого"if-elif-elif -......- Элиф-Эльза" структура)? Спасибо!

3 ответов


for col in worksheet.columns:
     max_length = 0
     column = col[0].column # Get the column name
     for cell in col:
         try: # Necessary to avoid error on empty cells
             if len(str(cell.value)) > max_length:
                 max_length = len(cell.value)
         except:
             pass
     adjusted_width = (max_length + 2) * 1.2
     worksheet.column_dimensions[column].width = adjusted_width

Это, вероятно, можно было бы сделать аккуратнее, но это делает работу. Вы захотите поиграть со значением adjusted_width в соответствии с тем, что хорошо для шрифта, который вы используете при просмотре. Если вы используете монотип, вы можете получить его точное, но не однозначное соотношение, поэтому вам все равно нужно будет немного его настроить.

Если вы хотите получить причудливый и точный без монотипа, вы можете сортировать буквы по ширине и назначать каждой ширине значение float, которое вы затем складываете. Это требуется третий цикл, разбирающий каждый символ в значении ячейки и суммирующий результат для каждого столбца и, вероятно, словарь сортировки символов по ширине, возможно, излишне, но круто, если вы это сделаете.

Edit: на самом деле, кажется, есть лучший способ измерения визуального размера текста: ссылке лично я предпочел бы технику matplotlib.

надеюсь, я мог бы помочь, мой самый первый ответ stackoverflow=)


У меня проблема с merged_cells и autosize не работают правильно, если у вас такая же проблема, вы можете решить добавление следующих строк внутри кода oldsea

for col in worksheet.columns:
    max_length = 0
    column = col[0].column # Get the column name
    for cell in col:
        if cell.coordinate in worksheet.merged_cells: # not check merge_cells
            continue
        try: # Necessary to avoid error on empty cells
            if len(str(cell.value)) > max_length:
                max_length = len(cell.value)
        except:
            pass
    adjusted_width = (max_length + 2) * 1.2
    worksheet.column_dimensions[column].width = adjusted_width

Если возможно, вы должны определить длину самой длинной записи в столбце и использовать это, чтобы установить ширину.

Я предполагаю, что вы можете использовать для записи в ascii_uppercase.

Я на мобильном банкомате, поэтому не могу дать конкретный пример кода, но то, что я сказал раньше, должно помочь вам приблизиться к тому, чего вы хотите достичь.