Несколько NamedStyle в одном листе Excel - Python openpyxl - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь придать стиль нескольким ячейкам в листе Excel.В листе есть несколько таблиц.Заголовки таблицы имеют жирный шрифт и обычную рамку, тогда как данные таблицы имеют только порядок.

Я определил 2 NamedStyle и прикрепил к книге.Но когда, когда стиль в ячейках, я получаю ошибку ниже.

book.add_named_style(tableHeaderStyle)
File "C:\Users\bsingh\AppData\Local\Programs\Python\Python36-32\lib\site-packages\openpyxl\workbook\workbook.py", line 303, in add_named_style
    self._named_styles.append(style)
File "C:\Users\bsingh\AppData\Local\Programs\Python\Python36-32\lib\site-packages\openpyxl\styles\named_styles.py", line 194, in append
    raise ValueError("""Style {0} exists already""".format(style.name))
ValueError: Style TableHeaderStyle exists already

Код:

from openpyxl.styles import Border, Side, Color, PatternFill, Font, Alignment, NamedStyle
my_border = Border(left=Side(border_style='thin', color='000000'),
                right=Side(border_style='thin', color='000000'),
                top=Side(border_style='thin', color='000000'),
                bottom=Side(border_style='thin', color='000000'))

normalBorderStyle = NamedStyle(name="NormalBorderStyle",
                           alignment=Alignment(horizontal='center', vertical='center', wrap_text=True), border=my_border)

tableHeaderStyle = NamedStyle(name="TableHeaderStyle", alignment=Alignment(horizontal='center', vertical='center'), border=my_border, \
                               font=Font(bold=True), \
                                fill=PatternFill(patternType='solid', fill_type='solid', fgColor=Color('C4D79B')))

#This function is called for a table in worksheet "ws" with the cell range as the start and end column of table "B3:G7".
def set_border(ws, cell_range):
    flag = 0
    for row in ws.iter_rows(cell_range):
        for cell in row:
            cell.style = "NormalBorderStyle"
            if flag ==0 :
                cell.border = "TableHeaderStyle"
        flag = 1

book = load_workbook(xlsfile)
book.add_named_style(tableHeaderStyle)
book.add_named_style(normalBorderStyle)
ws_active = book.get_sheet_by_name("Summary")
set_border(ws_active, "B3:G7")

1 Ответ

0 голосов
/ 28 мая 2018

Очень похоже, что стиль уже существует в загружаемой книге, потому что исключение не связано с вашей функцией.Вы можете добавить чек, используя book.named_styles.

...