如何使用 openpyxl 取得和設定 Excel 儲存格格式
訂閱 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參數是一個形式為AARRGGBB或RRGGBB的字串,其中RR,GG,BB,AA是表示紅色,綠色,藍色以及透明度的十六進位數值,取值範圍從00到FF。AA為00表示不透明,AA為FF表示完全透明,透明度的效果視具體的 Office 軟體而定,一些 Office 軟體可能不會支援透明度。- indexed 參數
indexed參數是一個取值範圍在0到63之間的整數,用於選擇某個預先定義的索引色彩。- auto 參數
auto參數是一個布林值,如果為True則表示使用自動色彩。- theme 參數
theme參數是一個整數,用於指定色彩是 Excel 檔案目前主題中的第幾個色彩,比如,0表示采用目前主題中的第一個色彩。- tint 參數
tint參數是一個取值範圍在-1到1之間的浮點數,用於設定色彩的飽和度與亮度,該參數的值越大,則色彩越趨近於白色,該參數的值越小,則色彩越趨近於黑色,如果為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物件擁有變數rgb,indexed,auto,theme,tint和type,以及唯讀屬性index,他們的值與傳遞給Color建構子的引數的值相同,如果你沒有對變數作出修改。
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)00FF0000openpyxl 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物件,或一個形式為AARRGGBB或RRGGBB的字串。- 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物件擁有變數name,sz,b,i,charset,u,strike,color,scheme,family,size,bold,italic,strikethrough,underline,vertAlign,outline,shadow,condense,extend,在未作出修改時,他們的值與傳遞給Font建構子的引數的值相同。
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_DASHDOT,BORDER_DASHDOTDOT,BORDER_DASHED,BORDER_DOTTED,BORDER_DOUBLE,BORDER_HAIR,BORDER_MEDIUM,BORDER_MEDIUMDASHDOT,BORDER_MEDIUMDASHDOTDOT,BORDER_MEDIUMDASHED,BORDER_SLANTDASHDOT,BORDER_THICK,BORDER_THIN。- color 參數
color參數表示邊的色彩,可以是一個Color物件,或一個形式為AARRGGBB或RRGGBB的字串。- border_style 參數
border_style參數與style參數的作用相同。
Side 物件的變數
Side物件擁有變數style,color,border_style,在未作出修改時,他們的值與傳遞給Side建構子的引數的值相同。
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 參數
left,right,top,bottom參數是表示左邊,右邊,上邊,下邊格式的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物件擁有變數left,right,top,bottom,diagonal,diagonal_direction,vertical,horizontal,diagonalUp,diagonalDown,outline,start,end,在未作出修改時,他們的值與傳遞給Border建構子的引數的值相同。
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套件中的類別PatternFill和GradientFill,屬於模組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_SOLID,FILL_PATTERN_DARKDOWN,FILL_PATTERN_DARKGRAY,FILL_PATTERN_DARKGRID,FILL_PATTERN_DARKHORIZONTAL,FILL_PATTERN_DARKTRELLIS,FILL_PATTERN_DARKUP,FILL_PATTERN_DARKVERTICAL,FILL_PATTERN_GRAY0625,FILL_PATTERN_GRAY125,FILL_PATTERN_LIGHTDOWN,FILL_PATTERN_LIGHTGRAY,FILL_PATTERN_LIGHTGRID,FILL_PATTERN_LIGHTHORIZONTAL,FILL_PATTERN_LIGHTTRELLIS,FILL_PATTERN_LIGHTUP,FILL_PATTERN_LIGHTVERTICAL,FILL_PATTERN_MEDIUMGRAY。- fgColor 參數
fgColor參數表示填入的前景(開始)色彩,可以是一個Color物件,或一個形式為AARRGGBB或RRGGBB的字串。- bgColor 參數
bgColor參數表示填入的背景(結束)色彩,可以是一個Color物件,或一個形式為AARRGGBB或RRGGBB的字串。- fill_type 參數
fill_type參數與patternType參數的作用相同。- start_color 參數
start_color參數與fgColor參數的作用相同。- end_color 參數
end_color參數與bgColor參數的作用相同。
openpyxl.styles.fills模組的變數DEFAULT_EMPTY_FILL,DEFAULT_GRAY_FILL定義了預設圖樣填入格式,其值為運算式PatternFill()和PatternFill(patternType='gray125')的運算結果。
PatternFill 物件的變數
PatternFill物件擁有變數patternType,fgColor,bgColor,fill_type,start_color,end_color,在未作出修改時,他們的值與傳遞給PatternFill建構子的引數的值相同。
在GradientFill類別的建構子中,參數degree,left,right,top,bottom均可能對漸層的角度產生影響。
GradientFill(type='linear', degree=0, left=0, right=0, top=0, bottom=0, stop=())
- type 參數
type參數是一個表示漸層填入類型的字串,可以是以下值之一,'linear'(線性),'path'(路徑)。- degree 參數
degree參數是一個浮點數,表示漸層的方向(角度)。- left 參數
left參數是表示漸層左邊位置的浮點數,其具體作用和漸層型別有關,取值範圍從0到1。- right 參數
right參數是表示漸層右邊位置的浮點數,其具體作用和漸層型別有關,取值範圍從0到1。- top 參數
top參數是表示漸層頂端位置的浮點數,其具體作用和漸層型別有關,取值範圍從0到1。- bottom 參數
bottom參數是表示漸層底端位置的浮點數,其具體作用和漸層型別有關,取值範圍從0到1。- stop 參數
stop參數是一個疊代器物件,包含數個Stop物件,用於表示漸層的終結點。
GradientFill 物件的變數
GradientFill物件擁有變數type,degree,left,right,top,bottom,stop,在未作出修改時,他們的值與傳遞給GradientFill建構子的引數的值相同。
openpyxl套件的Stop類別,屬於模組openpyxl.styles.fills,用於表示 Excel 漸層填入格式中的色彩終結點,從一個終結點到另一個終結點,色彩將逐漸發生變化。
Stop(color, position)
- color 參數
color參數表示終結點的色彩,可以是一個Color物件,或一個形式為AARRGGBB或RRGGBB的字串。- position 參數
position參數是表示終結點位置的浮點數,取值範圍從0到1。
Stop 物件的變數
Stop物件擁有變數color,position,在未作出修改時,他們的值與傳遞給Stop建構子的引數的值相同。
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參數是一個表示行首縮排大小的整數,取值範圍在0至255之間。- relativeIndent 參數
relativeIndent參數是一個表示行首的相對縮排大小的整數,取值範圍在-255至255之間。- 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物件擁有變數horizontal,vertical,textRotation,wrapText,shrinkToFit,indent,relativeIndent,justifyLastLine,readingOrder,text_rotation,wrap_text,shrink_to_fit,mergeCell,在未作出修改時,他們的值與傳遞給Alignment建構子的引數的值相同。
from openpyxl.styles import Alignment
# 水平置中,垂直置中,自動換行
Alignment('center', 'center', wrapText=True)
# 需要時縮小文字,行首縮排大小 1
Alignment(shrinkToFit=True, indent=1)
# 文字方向從右到左
Alignment(readingOrder=2)取得和設定 Excel 儲存格的一般格式
Cell物件擁有名稱為font,border,fill,alignment的變數,可將其型別視為Font,Border,PatternFill或GradientFill,Alignment類別,他們被用於取得和設定 Excel 儲存格的字型格式,邊線格式,填入格式,以及對齊格式。
ReadOnlyCell物件擁有名稱為font,border,fill,alignment的唯讀屬性,其型別分別為Font,Border,PatternFill或GradientFill,Alignment類別,可用於取得 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物件。
# 讀取 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物件,你不能通過其font,border,fill,alignment變數修改儲存格的具體格式,只能通過指派一個新的Font,Border,PatternFill或GradientFill,Alignment物件來取代儲存格的原有格式,否則將引發例外狀況AttributeError: Style objects are immutable and cannot be changed.Reassign the style with a copy。
事實上,openpyxl套件的設計者並未嚴格實施以上的策略,比如,通過Cell物件的font屬性的color變數可以直接修改字型的色彩。
我們為上面的範例新增一些程式碼,直接修改A1儲存格字型的具體格式,這將導致例外狀況,但通過color變數修改字型色彩是可以的。
# …
# 可以修改字型色彩
ws['A1'].font.color.rgb = 'FFFF00'
# ERROR 不能直接修改具體格式
ws['A1'].font.b = TrueAttributeError: 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時顯示為紅色。
# 讀取 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 列或欄中的儲存格格式
Worksheet和WriteOnlyWorksheet物件的變數row_dimensions和column_dimensions,他們的font,border,fill,alignment,number_format變數的型別分別為Font,Border,PatternFill或GradientFill,Alignment類別以及str字串,可用於取得和設定 Excel 列或欄中的儲存格的字型格式,邊線格式,填入格式,對齊格式,數值格式。
Worksheet 和 WriteOnlyWorksheet 物件可能無法為擁有格式的儲存格設定格式
如果Cell物件已經擁有格式,那麽通過Worksheet或WriteOnlyWorksheet物件的row_dimensions或column_dimensions變數為其設定格式可能不會成功。
WriteOnlyWorksheet 物件應在寫入資料之前設定儲存格格式
應該在寫入任何資料之前,使用WriteOnlyWorksheet物件的column_dimensions變數,為某一欄中的儲存格設定格式,否則格式可能不會生效。
應該在寫入任何一列資料之前,使用WriteOnlyWorksheet物件的row_dimensions變數,為該列中的儲存格設定格式,否則格式可能不會生效。
在下面的範例中,由於儲存格A1,B2,D4(包括在程式碼執行過程中被設定了格式的儲存格)擁有格式,因此,通過列和欄設定的格式對他們可能無效。
# 讀取 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