URLhttps://learnscript.net/zh/office-programming/openpyxl/styles/named-styles/
    复制链接转到说明  示例

    如何使用 openpyxl 处理 Excel 单元格的命名格式?NamedStyle 对象介绍

    我被代码海扁署名-非商业-禁演绎
    阅读 7:27·字数 2235·更新 

    openpyxl Excel 命名格式对象 NamedStyle

    openpyxl包的NamedStyle类,属于模块openpyxl.styles.named_styles,用于表示 Excel 中的命名格式。NamedStyle对象存储在工作簿对象中,可以被任意工作表中的单元格对象以某种形式引用。

    什么是 Excel 命名格式?

    Microsoft Excel 工作表中的单元格可以拥有单独的格式,修改他们不会影响其他单元格,而命名格式可以被多个单元格引用,修改命名格式将影响所有引用他的单元格。

    Excel 命名格式拥有自己的名称,字体格式,填充格式,边框格式,对齐格式,数字格式,以及保护信息。

    创建 Excel 命名格式

    如果你希望为 Excel 工作簿添加命名格式,那么需要首先创建openpyxl包的NamedStyle对象,然后通过工作簿对象的相关方法执行添加操作。

    NamedStyle(name='Normal', font=None, fill=None, border=None, alignment=None, number_format=None, protection=None, builtinId=None, hidden=False,)

    name 参数

    name参数是一个表示命名格式名称的字符串。

    font 参数

    font参数是表示字体格式的Font对象。

    fill 参数

    fill参数是表示填充格式的PatternFill对象或GradientFill对象。

    border 参数

    border参数是表示边框格式的Border对象。

    alignment 参数

    alignment参数是表示对齐格式的Alignment对象。

    number_format 参数

    number_format参数是表示如何对数字进行格式化的字符串。

    protection 参数

    protection参数是表示保护信息的Protection对象。

    builtinId 参数

    builtinId参数是表示内置 ID 的整数,其效果未知。

    hidden 参数

    hidden参数是一个布尔值,其效果未知。

    NamedStyle 对象的变量

    NamedStyle对象拥有变量namefontfillborderalignmentnumber_formatprotectionbuiltinIdhidden,在未作出修改时,他们的值与传递给NamedStyle构造器的实参的值相同。

    格式,单元格

    关于openpyxl包的FontPatternFillGradientFillBorderAlignmentProtection对象,你可以查看如何使用 openpyxl 获取和设置 Excel 单元格格式一节,以及openpyxl Excel 单元格保护对象 Protection一段。

    create.py
    from openpyxl.styles import Font, Border, Side
    from openpyxl.styles.named_styles import NamedStyle
    
    # 名称为 My Style 的命名格式 NamedStyle( 'My Style', # 字体,20 磅 font=Font(sz=20), # 下边框为红色双实线 border=Border(bottom=Side('double', 'FF0000')) )

    为 Excel 工作簿添加命名格式

    Workbook对象的add_named_style方法,可用于为 Excel 工作簿添加命名格式,当然,这需要一个有效的NamedStyle对象。

    workbook.add_named_style(style)

    style 参数

    style参数是一个NamedStyle对象,其对应的命名格式将被添加至工作簿。

    在下面的示例中,我们创建了一个新的命名格式,并将其添加至工作簿。

    add.py
    # 创建只写工作簿
    from openpyxl import Workbook
    wb = Workbook(True)
    
    from openpyxl.styles import Font from openpyxl.styles.named_styles import NamedStyle
    # 创建一个命名格式 ns = NamedStyle( '绿色主题', # 字体,绿色 font=Font(color='00FF00'), # 数字显示为百分比 number_format='0%' )
    # 将命名格式添加至 Excel 工作簿 wb.add_named_style(ns)
    wb.save('Add.xlsx')

    无法将命名格式名称相同的 NamedStyle 对象添加至同一个工作簿对象

    如果NamedStyle命名格式对象的名称(name变量),与工作簿对象中的某个命名格式的名称相同,那么此NamedStyle对象将无法被添加至工作簿对象,这会引发异常ValueError: Style … exists already

    当然,大部分 Excel 文件都会包含一些内置的命名格式,比如,名称为NormalCommaCurrencyPercent的命名格式。

    在下面的示例中,由于文件Style.xlsx已经包含命名格式Normal,因此,方法add_named_style抛出了异常。

    add_same.py
    # 读取 Excel 文件 Style.xlsx
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    
    from openpyxl.styles.named_styles import NamedStyle
    # ERROR 工作簿已经包含名称为 Normal 的命名格式 wb.add_named_style(NamedStyle('Normal'))
    ValueError: Style Normal exists already

    获取 Excel 工作簿中所有命名格式的名称

    Workbook对象的named_stylesstyle_names属性,他们的返回值是一个 Python 字符串列表,列表包含了 Excel 工作簿中所有的命名格式的名称。

    workbook.named_styles
    workbook.style_names

    get_all.py
    # 读取 Excel 文件 Style.xlsx
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    
    # 显示 Excel 工作簿中的所有命名格式的名称 print(wb.style_names) print(wb.named_styles)
    ['Normal', 'Comma', 'Comma [0]', 'Currency', 'Currency [0]', 'Percent']
    ['Normal', 'Comma', 'Comma [0]', 'Currency', 'Currency [0]', 'Percent']

    获取和设置 Excel 单元格的命名格式

    Cell对象拥有名称为style的变量,他可被用于获取和设置 Excel 单元格所引用的命名格式。当获取命名格式时,style变量为命名格式的名称,如果单元格没有引用任何命名格式,则返回的名称为Normal,如果引用了命名格式,则可能会引发异常IndexError: list index out of range。当设置命名格式时,需要将命名格式的名称或一个命名格式对象赋值给style变量。

    cell.style
    cell.style = style

    style 值

    style可以是表示命名格式名称的字符串,工作簿对象必须拥有该名称的命名格式,否则将导致异常ValueError: … is not a known style

    当然,style也可以是一个NamedStyle命名格式对象,这将导致该命名格式对象被添加至工作簿对象,并被单元格引用,因此,NamedStyle对象的名称不能与工作簿对象中的某个命名格式的名称相同。

    在下面的示例中,我们为单元格A1设置了默认的命名格式Comma,为单元格B1设置了新的命名格式MyStyle

    cell.py
    # 读取 Excel 文件 Style.xlsx 中的工作表 Cell
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    ws = wb['Cell']
    
    from openpyxl.styles.named_styles import NamedStyle
    # 将单元格 A1 的命名格式设置为默认的 Comma ws['A1'].style = 'Comma'
    # 将单元格 B1 的命名格式设置为 MyStyle b1 = ws['B1'] print(b1.style) b1.style = NamedStyle('MyStyle') print(b1.style)
    wb.save('Cell.xlsx')
    Normal
    MyStyle

    源码

    src/zh/openpyxl/styles/named_styles·codebeatme/office-programming·GitHub