如何使用 openpyxl 處理 Excel 儲存格的命名格式?NamedStyle 物件介紹
訂閱 480
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