URLhttps://learnscript.net/zh-hant/office-programming/openpyxl/styles/named-styles/
    複製連結移至說明  範例

    如何使用 openpyxl 處理 Excel 儲存格的命名格式?NamedStyle 物件介紹

    閱讀 7:29·字數 2249·更新 
    Youtube 頻道
    訂閱 375

    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-hant/openpyxl/styles/named_styles·codebeatme/office-programming·GitHub