如何使用 openpyxl 處理 Excel 儲存格的命名格式?NamedStyle 物件介紹
訂閱 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
物件擁有變數name
,font
,fill
,border
,alignment
,number_format
,protection
,builtinId
,hidden
,在未作出修改時,他們的值與傳遞給NamedStyle
建構子的引數的值相同。
格式,儲存格
關於openpyxl
套件的Font
,PatternFill
,GradientFill
,Border
,Alignment
,Protection
物件,你可以檢視如何使用 openpyxl 取得和設定 Excel 儲存格格式一節,以及openpyxl Excel 儲存格保護物件 Protection一段。
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
物件,其對應的命名格式將被新增至活頁簿。
在下面的範例中,我們建立了一個新的命名格式,並將其新增至活頁簿。
# 建立唯寫活頁簿
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 檔案都會包含一些內建的命名格式,比如,名稱為Normal
,Comma
,Currency
,Percent
的命名格式。
在下面的範例中,由於檔案Style.xlsx
已經包含命名格式Normal
,因此,方法add_named_style
擲回了例外狀況。
# 讀取 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_styles
和style_names
屬性,他們的傳回值是一個 Python 字串串列,串列包含了 Excel 活頁簿中所有的命名格式的名稱。
workbook.named_styles
workbook.style_names
# 讀取 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
。
# 讀取 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