Я ищу эффективный способ применения стиля к диапазону ячеек с помощью 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
Есть идеи?