Нужно сжать код и избежать вложенных циклов for, так как лист excel имеет 8K строк, занимающих слишком много времени [для стилизации ячеек excel]
У меня есть совместимость openpyxl и pyxlsb, используя openpyxlI, я сделал некоторый код для соответствующего стиля ячеек, но мне нужно сжать код или просто избежать вложенных циклов for или itertools. Для следующих требований я попробовал код:
Что я уже пробовал:
1) здесь для 1-й строки Мне нужно получить bgcolor:8A2BE2 и текст должен быть жирным и белым:
if '1' in cell.coordinate and len(cell.coordinate) == 2: cell.font = Font(color=colors.WHITE, bold=True) cell.fill = PatternFill(start_color='8A2BE2', end_color='8A2BE2', fill_type='solid')
2) для A и B cols мне нужен некоторый bgcolor:желтый и полностью бордюрный:
for x in cell.coordinate: if x[0] == 'A' or x[0] == 'B': cell.fill = PatternFill(start_color=colors.YELLOW, end_color=colors.YELLOW, fill_type='solid') bd = Side(color="000000") cell.border = Border(left=bd, top=bd, right=bd, bottom=bd)
3) для всех столбцов, мне нужно увеличить ширину ячейки.значение:
if cell.value: dims[cell.column] = max((dims.get(cell.column, 0), len(str(cell.value)))) for col, value in dims.items(): result_sheet.column_dimensions[col].width = value
полный код:
#for styling dims = {} for row in result_sheet.iter_rows(): for cell in row: cell.alignment = Alignment(horizontal='center', vertical='center', wrap_text=True) if '1' in cell.coordinate and len(cell.coordinate) == 2: cell.font = Font(color=colors.WHITE, bold=True) cell.fill = PatternFill(start_color='8A2BE2', end_color='8A2BE2', fill_type='solid') else: for x in cell.coordinate: if x[0] == 'A' or x[0] == 'B': cell.fill = PatternFill(start_color=colors.YELLOW, end_color=colors.YELLOW, fill_type='solid') bd = Side(color="000000") cell.border = Border(left=bd, top=bd, right=bd, bottom=bd) if cell.value: dims[cell.column] = max((dims.get(cell.column, 0), len(str(cell.value)))) for col, value in dims.items(): result_sheet.column_dimensions[col].width = value