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.
Я на мобильном банкомате, поэтому не могу дать конкретный пример кода, но то, что я сказал раньше, должно помочь вам приблизиться к тому, чего вы хотите достичь.