Применение стиля к CellRange, OpenPyXl (или итерации по CellsRange) - PullRequest
0 голосов
/ 23 апреля 2020

Я ищу эффективный способ применения стиля к диапазону ячеек с помощью OpenPyXl

В этом случае применение ко всему ряду не работает для меня

У меня есть вариант с двумя для, но я ищу лучший способ:

def set_style(ws:Worksheet, range_col: callable, range_row: callable, color: str = None):
    # set_style(ws, range(ord('A'), ord('L') + 1), (1,2,))
    for col in range_col:
        for row in range_row:

            if not color:
                color = self._default_styled_color

            border_color = Side(style='thick', color=color)

            ws[chr(col) + str(row)].font = Font(bold=True, color="FFFFFF")
            ws[chr(col) + str(row)].border = Border(
                left=border_color, top=border_color, right=border_color, bottom=border_color)

            ws[chr(col) + str(row)].fill = PatternFill("solid", fgColor=color)
            ws[chr(col) + str(row)].alignment = self.alignment_center

На самом деле, я в настоящее время расширяю Worksheet и Workbook, поэтому, если есть какой-то полезный закрытый метод / атрибуты, я бы смог использовать тоже

То, что я хотел бы сделать, будет что-то вроде

class Page(Worksheet):

    def set_header_style_on_range(self, range_string=None, color: str = None):
        """ Range is a cell range (e.g. A1:E1) """
        cr = CellRange(range_string=range_string)

        if not color:
            color = self._default_styled_color

        border_color = Side(style='thick', color=color)

        cr.font = Font(bold=True, color="FFFFFF")
        cr.border = Border(
            left=border_color, top=border_color, right=border_color, bottom=border_color)

        cr.fill = PatternFill("solid", fgColor=color)
        cr.alignment = self.alignment_center

Или, если возможно (не возможно)

def set_header_style_on_range(self, range_string=None, color: str = None):
    """ Range is a cell range (e.g. A1:E1) """
    cr = CellRange(range_string=range_string)

    if not color:
        color = self._default_styled_color

    border_color = Side(style='thick', color=color)

    for cell in cr: # error - dont work, do not copy this
        cell.font = Font(bold=True, color="FFFFFF")
        cell.border = Border(
            left=border_color, top=border_color, right=border_color, bottom=border_color)

        cell.fill = PatternFill("solid", fgColor=color)
        cell.alignment = self.alignment_center

Есть идеи?

...