单个excel工作表中的多个名称样式-Python openpyxl
我正在尝试为excel工作表中的多个单元格设置样式。该工作表中有多个表。表格标题有粗体字体和普通边框,而表格数据只有顺序 我已经定义了2个名称样式并附加到工作簿。但是当样式转换为单元格时,我得到下面的错误单个excel工作表中的多个名称样式-Python openpyxl,excel,python-3.x,pandas,openpyxl,Excel,Python 3.x,Pandas,Openpyxl,我正在尝试为excel工作表中的多个单元格设置样式。该工作表中有多个表。表格标题有粗体字体和普通边框,而表格数据只有顺序 我已经定义了2个名称样式并附加到工作簿。但是当样式转换为单元格时,我得到下面的错误 book.add_named_style(tableHeaderStyle) File "C:\Users\bsingh\AppData\Local\Programs\Python\Python36-32\lib\site-packages\openpyxl\workbook\workbook
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
代码:
它看起来很像您正在加载的书中已经存在的样式,因为异常与您的函数无关。您可能希望使用
book.named_styles
添加一个检查。请提供完整的回溯。@charlichtlark请在trace:book.add_named_style(tableHeaderStyle)文件“C:\Users\bsingh\AppData\Local\Programs\Python\Python36-32\lib\site packages\openpyxl\workbook\workbook.py”,第303行,在AddStyle self.styles.append(style)文件“C:\Users\bsingh\AppData\Local\Programs\Python\Python36-32\lib\site packages\openpyxl\styles\NamedStyles.py”的第194行中,在append提升值错误(“style{0}已经存在”“。格式(style.name))ValueError:Style TableHeaderStyle已存在请在您的问题中回溯,使其更易于阅读。@Charletchlark是更新了问题,5分钟后无法更新注释。是的,有一个命名样式与本书关联。但我试图删除工作表并再次添加,但仍然出现错误。我是否必须从整个工作簿中删除命名样式,或者如果有这样的选项,我可以将其从工作表中删除?命名样式是每个工作簿的,例外情况是正确的,因为您正在尝试创建重复的样式。样式是可编辑的,但我始终建议使用不同的名称,而不是编辑默认样式。
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")