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 шт):
Воспользуйтесь готовой функцией:
from openpyxl.utils.cell import get_column_letter
Данная функция использует кешируемые значения, поэтому работает с асимптотической сложностью “O(1)”