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

    如何使用 openpyxl 取得和設定 Excel 儲存格格式

    閱讀 31:42·字數 9512·更新 
    Youtube 頻道
    訂閱 480

    與 Excel 命名格式相關的內容,請檢視內容分類一段列出的章節。

    openpyxl Excel 色彩物件 Color

    openpyxl套件的Color類別,屬於模組openpyxl.styles.colors,用於表示 Excel 中的色彩,比如儲存格的字型色彩,儲存格的邊線色彩。

    Color物件的建構子如下,在建立Color執行個體時,只需根據色彩的類型給出必要的參數即可。

    Color(rgb='00000000', indexed=None, auto=None, theme=None, tint=0.0, index=None, type='rgb')

    rgb 參數

    rgb參數是一個形式為AARRGGBBRRGGBB的字串,其中RRGGBBAA是表示紅色,綠色,藍色以及透明度的十六進位數值,取值範圍從00FF

    AA00表示不透明,AAFF表示完全透明,透明度的效果視具體的 Office 軟體而定,一些 Office 軟體可能不會支援透明度。

    indexed 參數

    indexed參數是一個取值範圍在063之間的整數,用於選擇某個預先定義的索引色彩。

    auto 參數

    auto參數是一個布林值,如果為True則表示使用自動色彩。

    theme 參數

    theme參數是一個整數,用於指定色彩是 Excel 檔案目前主題中的第幾個色彩,比如,0表示采用目前主題中的第一個色彩。

    tint 參數

    tint參數是一個取值範圍在-11之間的浮點數,用於設定色彩的飽和度與亮度,該參數的值越大,則色彩越趨近於白色,該參數的值越小,則色彩越趨近於黑色,如果為0,則色彩保持原有的飽和度與亮度。

    index 參數

    index參數與indexed參數的作用相同。

    type 參數

    type參數用於表示色彩的類型,但事實上他沒有任何的作用,Color物件的色彩類型將由建構子的其他參數確定。

    Color物件的value屬性,可以方便的取得或設定色彩的值,但不能指派不同類型的色彩。

    color.value
    color.value = value

    value 值

    value值是某種類型的色彩的值。

    openpyxl.styles.colors模組擁有以下表示色彩的形式為AARRGGBB的字串變數,BLACK(黑色,00000000),WHITE(白色,00FFFFFF),BLUE(藍色,000000FF)。

    Color 物件的特性

    Color物件擁有變數rgbindexedautothemetinttype,以及唯讀屬性index,他們的值與傳遞給Color建構子的引數的值相同,如果你沒有對變數作出修改。

    color.py
    from openpyxl.styles import Color
    
    # 紅色,飽和度 50% c = Color(rgb='FF0000', tint=0.5) print(c.value) # 將色彩設定為藍色 c.value = '0000FF'
    # 索引為 2 的索引色彩是紅色 Color(indexed=2) # 自動色彩 Color(auto=True)
    from openpyxl.styles.colors import BLACK # 黑色 Color(rgb=BLACK)
    00FF0000

    openpyxl Excel 字型物件 Font

    openpyxl套件的Font類別,屬於模組openpyxl.styles.fonts,表示 Excel 中的字型格式,通常用於儲存格物件Cell,其建構子如下。

    Font(name=None, sz=None, b=None, i=None, charset=None, u=None, strike=None, color=None, scheme=None, family=None, size=None, bold=None, italic=None, strikethrough=None, underline=None, vertAlign=None, outline=None, shadow=None, condense=None, extend=None)

    name 參數

    name參數是一個表示字型名稱的字串。

    sz 參數

    sz參數是一個表示字型大小的浮點數,以磅(pt)為單位。

    b 參數

    b參數是一個布林值,如果為True則采用粗體。

    i 參數

    i參數是一個布林值,如果為True則采用斜體。

    charset 參數

    charset參數是一個整數,表示字型針對的是哪種語言。

    u 參數

    u參數是一個表示底線格式的字串,可以是以下值之一,'single'(單底線,對應Font的類別變數UNDERLINE_SINGLE),'double'(雙底線,對應Font的類別變數UNDERLINE_DOUBLE),'singleAccounting'(會計單底線,對應Font的類別變數UNDERLINE_SINGLE_ACCOUNTING),'doubleAccounting'(會計雙底線,對應Font的類別變數UNDERLINE_DOUBLE_ACCOUNTING)。

    strike 參數

    strike參數是一個布林值,如果為True則采用刪除線。

    color 參數

    color參數表示字型的色彩,可以是一個Color物件,或一個形式為AARRGGBBRRGGBB的字串。

    scheme 參數

    scheme參數是一個字串,用於表示使用字型方案中的哪個字型,可以是以下值之一,'major'(使用字型方案中的主要字型),'minor'(使用字型方案中的次要字型)。

    family 參數

    family參數(可能)是一個表示字型所屬家族的數值。

    size 參數

    size參數與sz參數的作用相同。

    bold 參數

    bold參數與b參數的作用相同。

    italic 參數

    italic參數與i參數的作用相同。

    strikethrough 參數

    strikethrough參數與strike參數的作用相同。

    underline 參數

    underline參數與u參數的作用相同。

    vertAlign 參數

    vertAlign參數是一個表示字型的垂直對齊方式的字串,可以是以下值之一,'superscript'(字型作為上標顯示),'subscript'(字型作為下標顯示),'baseline'(字型采用基線對齊)。

    outline 參數

    outline參數是一個布林值,如果為True則顯示文字的輪廓。

    shadow 參數

    shadow參數是一個布林值,如果為True則顯示文字的陰影。

    condense 參數

    condense參數一個布林值,如果為True,則表示縮小文字間距(該參數可能不會產生效果)。

    extend 參數

    extend參數一個布林值,如果為True,則表示擴大文字間距(該參數可能不會產生效果)。

    openpyxl.styles.fonts模組的變數DEFAULT_FONT定義了預設字型,其值為運算式Font(name='Calibri', sz=11, family=2, b=False, i=False, color=Color(theme=1), scheme='minor')的運算結果。

    Font 物件的變數

    Font物件擁有變數nameszbicharsetustrikecolorschemefamilysizebolditalicstrikethroughunderlinevertAlignoutlineshadowcondenseextend,在未作出修改時,他們的值與傳遞給Font建構子的引數的值相同。

    font.py
    from openpyxl.styles import Font, Color
    
    # 粗體,斜體,單底線,刪除線 Font(b=True, i=True, u=Font.UNDERLINE_SINGLE, strike=True) # 輪廓,陰影,20 磅 Font(outline=True, shadow=True, sz=20) # 下標 Font(vertAlign='superscript') # 紅色,飽和度 50% Font(color=Color(rgb='FF0000', tint=0.5)) # 藍色 Font(color='0000FF')

    openpyxl Excel 邊物件 Side

    openpyxl套件的Side類別,屬於模組openpyxl.styles.borders,用於表示 Excel 中的邊的格式。請註意邊與邊線的區別,邊線包含多個邊,Side物件對應了邊線中的邊,其建構子如下。

    Side(style=None, color=None, border_style=None)

    style 參數

    style參數是一個表示邊的形狀的字串,可以是以下值之一,'dashDot'(點狀虛線),'dashDotDot'(點點狀虛線),'dashed'(虛線),'dotted'(點線),'double'(雙實線),'hair'(發線),'medium'(中等實線),'mediumDashDot'(點狀中等虛線),'mediumDashDotDot'(點點狀中等虛線),'mediumDashed'(中等粗虛線),'slantDashDot'(斜角點狀虛線),'thick'(粗實線),'thin'(細實線)。

    以上值分別對應openpyxl.styles.borders模組中的變數BORDER_DASHDOTBORDER_DASHDOTDOTBORDER_DASHEDBORDER_DOTTEDBORDER_DOUBLEBORDER_HAIRBORDER_MEDIUMBORDER_MEDIUMDASHDOTBORDER_MEDIUMDASHDOTDOTBORDER_MEDIUMDASHEDBORDER_SLANTDASHDOTBORDER_THICKBORDER_THIN

    color 參數

    color參數表示邊的色彩,可以是一個Color物件,或一個形式為AARRGGBBRRGGBB的字串。

    border_style 參數

    border_style參數與style參數的作用相同。

    Side 物件的變數

    Side物件擁有變數stylecolorborder_style,在未作出修改時,他們的值與傳遞給Side建構子的引數的值相同。

    side.py
    from openpyxl.styles import Side
    
    # 紅色點線 Side('dotted', 'FF0000')

    openpyxl Excel 邊線物件 Border

    openpyxl套件的Border類別,屬於模組openpyxl.styles.borders,用於表示 Excel 中邊線的格式,其建構子如下。

    Border(left=None, right=None, top=None, bottom=None, diagonal=None, diagonal_direction=None, vertical=None, horizontal=None, diagonalUp=False, diagonalDown=False, outline=True, start=None, end=None)

    left,right,top,bottom 參數

    leftrighttopbottom參數是表示左邊,右邊,上邊,下邊格式的Side物件。

    diagonal 參數

    diagonal參數是表示邊線對角線格式的Side物件。

    diagonal_direction 參數

    diagonal_direction參數表示邊線對角線的方向,但其用法未知。

    vertical 參數

    vertical參數(可能)是表示邊線中垂直線格式的Side物件,當邊線包含多個儲存格時。

    horizontal 參數

    horizontal參數(可能)是表示邊線中水平線格式的Side物件,當邊線包含多個儲存格時。

    diagonalUp 參數

    diagonalUp參數是一個布林值,如果為True則在邊線中顯示上對角線,即從左下角到右上角的對角線。

    diagonalDown 參數

    diagonalDown參數是一個布林值,如果為True則在邊線中顯示下對角線,即從左上角到右下角的對角線。

    outline 參數

    outline參數(可能)是一個表示是否顯示邊線外框的布林值。

    start,end 參數

    start參數與left參數的作用(可能)類似,end參數與right參數的作用(可能)類似。

    Border 物件的變數

    Border物件擁有變數leftrighttopbottomdiagonaldiagonal_directionverticalhorizontaldiagonalUpdiagonalDownoutlinestartend,在未作出修改時,他們的值與傳遞給Border建構子的引數的值相同。

    border.py
    from openpyxl.styles import Border, Side, Color
    
    # 左右為紅色雙實線,上下為藍色粗實線的邊線 double = Side('double', 'FF0000') thick = Side('thick', Color('0000FF')) Border(double, double, thick, thick)

    openpyxl Excel 填入物件 PatternFill,GradientFill

    openpyxl套件中的類別PatternFillGradientFill,屬於模組openpyxl.styles.fills,分別用於表示 Excel 中的圖樣填入格式和漸層填入格式,他們的建構子如下。

    PatternFill(patternType=None, fgColor=Color(), bgColor=Color(), fill_type=None, start_color=None, end_color=None)

    patternType 參數

    patternType參數是一個表示圖樣填入類型的字串,可以是以下值之一,'solid''darkDown''darkGray''darkGrid''darkHorizontal''darkTrellis''darkUp''darkVertical''gray0625''gray125''lightDown''lightGray''lightGrid''lightHorizontal''lightTrellis''lightUp''lightVertical''mediumGray'

    以上值分別對應openpyxl.styles.fills模組中的變數FILL_SOLIDFILL_PATTERN_DARKDOWNFILL_PATTERN_DARKGRAYFILL_PATTERN_DARKGRIDFILL_PATTERN_DARKHORIZONTALFILL_PATTERN_DARKTRELLISFILL_PATTERN_DARKUPFILL_PATTERN_DARKVERTICALFILL_PATTERN_GRAY0625FILL_PATTERN_GRAY125FILL_PATTERN_LIGHTDOWNFILL_PATTERN_LIGHTGRAYFILL_PATTERN_LIGHTGRIDFILL_PATTERN_LIGHTHORIZONTALFILL_PATTERN_LIGHTTRELLISFILL_PATTERN_LIGHTUPFILL_PATTERN_LIGHTVERTICALFILL_PATTERN_MEDIUMGRAY

    fgColor 參數

    fgColor參數表示填入的前景(開始)色彩,可以是一個Color物件,或一個形式為AARRGGBBRRGGBB的字串。

    bgColor 參數

    bgColor參數表示填入的背景(結束)色彩,可以是一個Color物件,或一個形式為AARRGGBBRRGGBB的字串。

    fill_type 參數

    fill_type參數與patternType參數的作用相同。

    start_color 參數

    start_color參數與fgColor參數的作用相同。

    end_color 參數

    end_color參數與bgColor參數的作用相同。

    openpyxl.styles.fills模組的變數DEFAULT_EMPTY_FILLDEFAULT_GRAY_FILL定義了預設圖樣填入格式,其值為運算式PatternFill()PatternFill(patternType='gray125')的運算結果。

    PatternFill 物件的變數

    PatternFill物件擁有變數patternTypefgColorbgColorfill_typestart_colorend_color,在未作出修改時,他們的值與傳遞給PatternFill建構子的引數的值相同。

    GradientFill類別的建構子中,參數degreeleftrighttopbottom均可能對漸層的角度產生影響。

    GradientFill(type='linear', degree=0, left=0, right=0, top=0, bottom=0, stop=())

    type 參數

    type參數是一個表示漸層填入類型的字串,可以是以下值之一,'linear'(線性),'path'(路徑)。

    degree 參數

    degree參數是一個浮點數,表示漸層的方向(角度)。

    left 參數

    left參數是表示漸層左邊位置的浮點數,其具體作用和漸層型別有關,取值範圍從01

    right 參數

    right參數是表示漸層右邊位置的浮點數,其具體作用和漸層型別有關,取值範圍從01

    top 參數

    top參數是表示漸層頂端位置的浮點數,其具體作用和漸層型別有關,取值範圍從01

    bottom 參數

    bottom參數是表示漸層底端位置的浮點數,其具體作用和漸層型別有關,取值範圍從01

    stop 參數

    stop參數是一個疊代器物件,包含數個Stop物件,用於表示漸層的終結點。

    GradientFill 物件的變數

    GradientFill物件擁有變數typedegreeleftrighttopbottomstop,在未作出修改時,他們的值與傳遞給GradientFill建構子的引數的值相同。

    openpyxl套件的Stop類別,屬於模組openpyxl.styles.fills,用於表示 Excel 漸層填入格式中的色彩終結點,從一個終結點到另一個終結點,色彩將逐漸發生變化。

    Stop(color, position)

    color 參數

    color參數表示終結點的色彩,可以是一個Color物件,或一個形式為AARRGGBBRRGGBB的字串。

    position 參數

    position參數是表示終結點位置的浮點數,取值範圍從01

    Stop 物件的變數

    Stop物件擁有變數colorposition,在未作出修改時,他們的值與傳遞給Stop建構子的引數的值相同。

    fill.py
    from openpyxl.styles import PatternFill, GradientFill, Color
    from openpyxl.styles.fills import Stop
    
    # 圖樣 darkDown,前景紅色,背景綠色 PatternFill('darkDown', 'FF0000', Color('00FF00')) # 旋轉 90 度,開始和結束為紅色,中間為綠色 GradientFill('path', 90, stop=( Stop('FF0000', 0), Stop('00FF00', 0.5), Stop('FF0000', 1), ))

    openpyxl Excel 對齊物件 Alignment

    openpyxl套件的Alignment類別,屬於模組openpyxl.styles.alignment,用於表示 Excel 中的對齊格式,其建構子如下。

    Alignment(horizontal=None, vertical=None, textRotation=0, wrapText=None, shrinkToFit=None, indent=0, relativeIndent=0, justifyLastLine=None, readingOrder=0, text_rotation=None, wrap_text=None, shrink_to_fit=None, mergeCell=None)

    horizontal 參數

    horizontal參數是一個表示水平對齊方式的字串,可以是以下值之一,'general'(常規),'left'(左對齊),'center'(置中對齊),'right'(右對齊),'fill'(填入,換行效果將被取消,並在需要時重複文字以占滿整個行),'justify'(兩端對齊,如果文字即將占滿整個行,則擴大文字之間的距離,以占滿整個行),'centerContinuous'(跨欄置中,文字會在多個欄內置中對齊,即便這些欄沒有合併),'distributed'(分散對齊,嘗試擴大文字或單字之間的距離以占滿整個行)。

    vertical 參數

    vertical參數是一個表示垂直對齊方式的字串,可以是以下值之一,'top'(靠上對齊),'center'(置中對齊),'bottom'(靠下對齊),'justify'(兩端對齊,嘗試擴大行之間的距離以占滿垂直空間),'distributed'(分散對齊,嘗試擴大行之間的距離以占滿垂直空間,如果只有一行,則該行會垂直置中)。

    textRotation 參數

    textRotation參數是一個表示文字的旋轉角度的整數,比如,30表示逆時針旋轉30度。

    wrapText 參數

    wrapText參數是一個布林值,如果為True則表示啟用自動換行。

    shrinkToFit 參數

    shrinkToFit參數是一個布林值,如果為True則會在需要時縮小文字以顯示全部。

    indent 參數

    indent參數是一個表示行首縮排大小的整數,取值範圍在0255之間。

    relativeIndent 參數

    relativeIndent參數是一個表示行首的相對縮排大小的整數,取值範圍在-255255之間。

    justifyLastLine 參數

    justifyLastLine參數是一個布林值,如果為True則對最後一行文字采用兩端對齊。

    readingOrder 參數

    readingOrder參數是一個表示文字方向的整數,1表示從左到右,2表示從右到左,0表示未設定文字方向。

    text_rotation 參數

    text_rotation參數與textRotation參數的作用相同。

    wrap_text 參數

    wrap_text參數與wrapText參數的作用相同。

    shrink_to_fit 參數

    shrink_to_fit參數與shrinkToFit參數的作用相同。

    mergeCell 參數

    mergeCell參數沒有任何的作用。

    Alignment 物件的變數

    Alignment物件擁有變數horizontalverticaltextRotationwrapTextshrinkToFitindentrelativeIndentjustifyLastLinereadingOrdertext_rotationwrap_textshrink_to_fitmergeCell,在未作出修改時,他們的值與傳遞給Alignment建構子的引數的值相同。

    align.py
    from openpyxl.styles import Alignment
    
    # 水平置中,垂直置中,自動換行 Alignment('center', 'center', wrapText=True) # 需要時縮小文字,行首縮排大小 1 Alignment(shrinkToFit=True, indent=1) # 文字方向從右到左 Alignment(readingOrder=2)

    取得和設定 Excel 儲存格的一般格式

    Cell物件擁有名稱為fontborderfillalignment的變數,可將其型別視為FontBorderPatternFillGradientFillAlignment類別,他們被用於取得和設定 Excel 儲存格的字型格式,邊線格式,填入格式,以及對齊格式。

    ReadOnlyCell物件擁有名稱為fontborderfillalignment的唯讀屬性,其型別分別為FontBorderPatternFillGradientFillAlignment類別,可用於取得 Excel 儲存格的字型格式,邊線格式,填入格式,以及對齊格式。

    cell|readonlycell.font
    cell|readonlycell.border
    cell|readonlycell.fill
    cell|readonlycell.alignment
    cell.font = font
    cell.border = border
    cell.fill = fill
    cell.alignment = alignment

    font 值

    font是一個表示儲存格字型格式的Font物件。

    border 值

    border是一個表示儲存格邊線格式的Border物件。

    fill 值

    fill是一個表示儲存格填入格式的PatternFill物件或GradientFill物件,。

    alignment 值

    alignment是一個表示儲存格對齊格式的Alignment物件。

    cell.py
    # 讀取 Excel 檔案 Style.xlsx 中的工作表 Cell
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    ws = wb['Cell']
    
    from openpyxl.styles import Font, Border, PatternFill, Alignment, Color, Side
    # 設定字型 Tahoma,15 磅,粗體,綠色,飽和度 50% ws['A1'].font = Font('Tahoma', 15, True, color=Color('00FF00', tint=0.5))
    # 顯示藍色的雙實線對角線 ws['B2'].border = Border(diagonal=Side('double', color='0000FF'), diagonalUp=True, diagonalDown=True)
    # 圖樣 lightDown,前景藍色,背景紅色 ws['C3'].fill = PatternFill('lightDown', Color('0000FF'), Color('FF0000'))
    # 顯示在右上角,在需要時縮小文字 ws['D4'].alignment = Alignment('right', 'top', shrinkToFit=True)
    wb.save('Cell.xlsx')

    不能通過 Cell 物件直接修改儲存格的具體格式

    對於Cell物件,你不能通過其fontborderfillalignment變數修改儲存格的具體格式,只能通過指派一個新的FontBorderPatternFillGradientFillAlignment物件來取代儲存格的原有格式,否則將引發例外狀況AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy

    事實上,openpyxl套件的設計者並未嚴格實施以上的策略,比如,通過Cell物件的font屬性的color變數可以直接修改字型的色彩。

    我們為上面的範例新增一些程式碼,直接修改A1儲存格字型的具體格式,這將導致例外狀況,但通過color變數修改字型色彩是可以的。

    cell.py
    # …
    # 可以修改字型色彩
    ws['A1'].font.color.rgb = 'FFFF00'
    # ERROR 不能直接修改具體格式
    ws['A1'].font.b = True
    AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy

    取得和設定 Excel 儲存格的數值格式

    Cell物件擁有名稱為number_format的字串型別變數,可用於表示如何對 Excel 儲存格中的數值進行格式化。

    ReadOnlyCell物件擁有名稱為number_format的字串型別的唯讀屬性,可用於取得 Excel 儲存格中數值的格式化方式。

    cell|readonlycell.number_format
    cell.number_format = format

    format 值

    format是一個表示如何對儲存格中的數值進行格式化的字串。

    openpyxl.styles.numbers模組擁有一些名稱以FORMAT開頭的變數,他們是openpyxl套件預先定義的 Excel 數值格式化方式。

    在下面的範例中,我們設定了儲存格E5的數值格式,他將使用千位分隔符,並在小於0時顯示為紅色。

    num_format.py
    # 讀取 Excel 檔案 Style.xlsx 中的工作表 Cell
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    ws = wb['Cell']
    
    # 使用千位分隔符,如果是負數,則顯示為紅色 ws['E5'].number_format = '#,##0;[RED]-#,##0'
    wb.save('Format.xlsx')

    取得和設定 Excel 列或欄中的儲存格格式

    WorksheetWriteOnlyWorksheet物件的變數row_dimensionscolumn_dimensions,他們的fontborderfillalignmentnumber_format變數的型別分別為FontBorderPatternFillGradientFillAlignment類別以及str字串,可用於取得和設定 Excel 列或欄中的儲存格的字型格式,邊線格式,填入格式,對齊格式,數值格式。

    Worksheet 和 WriteOnlyWorksheet 物件可能無法為擁有格式的儲存格設定格式

    如果Cell物件已經擁有格式,那麽通過WorksheetWriteOnlyWorksheet物件的row_dimensionscolumn_dimensions變數為其設定格式可能不會成功。

    WriteOnlyWorksheet 物件應在寫入資料之前設定儲存格格式

    應該在寫入任何資料之前,使用WriteOnlyWorksheet物件的column_dimensions變數,為某一欄中的儲存格設定格式,否則格式可能不會生效。

    應該在寫入任何一列資料之前,使用WriteOnlyWorksheet物件的row_dimensions變數,為該列中的儲存格設定格式,否則格式可能不會生效。

    在下面的範例中,由於儲存格A1B2D4(包括在程式碼執行過程中被設定了格式的儲存格)擁有格式,因此,通過列和欄設定的格式對他們可能無效。

    row_col.py
    # 讀取 Excel 檔案 Style.xlsx 中的工作表 Cell
    from openpyxl import load_workbook
    wb = load_workbook('Style.xlsx')
    ws = wb['Cell']
    
    from openpyxl.styles import Font, Border, PatternFill, Alignment, Side
    # 為第一列設定字型 Arial,雙實線底線 ws.row_dimensions[1].font = Font('Arial', u='double') # 為第二欄設定紅色底邊 ws.column_dimensions['B'].border = Border(bottom=Side('dashed', 'FF0000')) # 為第四欄填入綠色 ws.column_dimensions['D'].fill = PatternFill('solid', '00FF00') # 為第四列設定左下角對齊 ws.row_dimensions[4].alignment = Alignment('left', 'bottom')
    wb.save('RC.xlsx')

    內容分類

    原始碼

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