Kак проще изменить ширину диапазона столбцов

win32com - работает только на Windows, а OpenPyXL - кроссплатформенный. Хочется загрузить смартфон работой. Из-за того, что индексирование конкретного столбца при изменении ширины осуществляется буквой, а максимальное количество столбцов - цифрой, возникла необходимость написать конвертацию числа в индекс столбца XL. То есть:

1 -> A,     
2 -> B,      
...     
27 -> AA,     
...         
def o_col_letters_with_num(n):
    # from A to XFD
    letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    from itertools import product
    assert 0 < n <= 1024*16, f"{n} not fit to (0, 1024*16]"
    rez = sum([["".join(el) for el in product(letters, repeat=i)] for i in (1,2,3)], [])

    return rez[n-1]

wb = opx.load_workbook(file_xl)
ws_rec = wb["Sheet01"]
rows_, cols_ = ws_rec.max_row, ws_rec.max_column

for j in range(1, cols_ + 1):
    ws_rec.column_dimensions[o_col_letters_with_num(j)].width = 9.71

Все вроде норм, и код для нахождения индекса столбца по его номеру радует глаз, хоть и не оптимальный. Но все это заменяет одну строчку из win32com, примерно такую:

ws_rec.Columns('B:AZ').ColumnWidth = 9.71

Как того же добиться попроще? Может есть внутренняя функция такого "индексирования", а я просто не знаю?
А именно - определить границы используемой в экселе области и задать одинаковую ширину всем столбцам, например, 9.71.


Ответы (1 шт):

Автор решения: MaxU

Воспользуйтесь готовой функцией:

from openpyxl.utils.cell import get_column_letter

Данная функция использует кешируемые значения, поэтому работает с асимптотической сложностью “O(1)”

→ Ссылка