如何使用 Python openpyxl 套件驗證 Excel 資料?openpyxl DataValidation 物件介紹
Python openpyxl 套件中的 Excel 資料驗證物件 DataValidation
Pythonopenpyxl
套件中的DataValidation
類別,屬於模組openpyxl.worksheet.datavalidation
,用於表示與 Excel 儲存格相關的資料驗證。一個資料驗證可以針對一個 Excel 儲存格,也可以針對一個 Excel 範圍,Excel 工作表所包含的資料驗證,可通過openpyxl
套件的Worksheet
物件的data_validations
變數進行檢視,具體可以檢視取得和設定工作表中的資料驗證一段。
使用 Python openpyxl 套件的 DataValidation 物件建立 Excel 資料驗證
你可以使用 Pythonopenpyxl
套件的DataValidation
物件的建構子,建立新的 Excel 資料驗證,然後通過Worksheet
物件將其新增到 Excel 工作表中,具體可以檢視為工作表新增資料驗證一段。
DataValidation(type=None, formula1=None, formula2=None, showErrorMessage=False, showInputMessage=False, showDropDown=False, allowBlank=False, sqref=(), promptTitle=None, errorStyle=None, error=None, prompt=None, errorTitle=None, imeMode=None, operator=None, allow_blank=None)
- type 參數
type
參數是一個字串,用於指示將 Excel 儲存格中的內容作為哪種資料型別進行驗證,可以是以下取值之一,'whole'
(整數),'decimal'
(小數),'list'
(內容需要存在於串列中),'date'
(日期),'time'
(時間),'textLength'
(內容的長度),'custom'
(根據formula1
參數給出的公式進行驗證)。如果type
參數為None
,則允許輸入任何型別的資料。- formula1,formula2 參數
formula1
參數和formula2
參數是兩個表示 Excel 公式的字串,這些公式被用於資料驗證,比如,要判斷數值是否在3
和10
之間,那麽formula1
應該為'3'
,formula2
應該為'10'
。這裏需要指出,一些資料驗證僅會用到參數formula1
所表示的公式。如果
type
參數為'list'
,那麽formula1
表示的是串列中的項,兩個項之間需要使用逗號進行分隔,所有項需要使用雙引號括住,比如'"是,否,不確定"'
。- showErrorMessage 參數
showErrorMessage
參數用於設定在 Excel 儲存格中的內容未通過資料驗證時,是否顯示相關的錯誤資訊。預設值為False
,不顯示錯誤資訊。- showInputMessage 參數
showInputMessage
參數用於設定在選取 Excel 儲存格時,是否顯示相關提示資訊以提示使用者如何進行輸入。預設值為False
,不顯示提示資訊。- showDropDown 參數
showDropDown
參數用於設定在選取 Excel 儲存格時,是否顯示清單方塊,該參數在type
參數為'list'
時有效。在一些 Office 軟體中,showDropDown
參數為False
表示顯示清單方塊。- allowBlank,allow_blank 參數
allowBlank
參數和allow_blank
參數用於設定是否允許 Excel 儲存格為空。預設值為False
,不允許為空。- sqref 參數
sqref
參數用於設定對哪些 Excel 儲存格進行資料驗證,該參數可以是某個儲存格或範圍的位址,也可以是一個MultiCellRange
物件或包含CellRange
物件的 Python 元組。- promptTitle 參數
promptTitle
參數是在選取 Excel 儲存格時,顯示的提示資訊的標題。- errorStyle 參數
errorStyle
參數表示在 Excel 儲存格中的內容未通過資料驗證時執行的操作,可以是以下取值之一,'stop'
(輸入的內容會被復原),'warning'
(顯示警告),'information'
(顯示資訊)。- error 參數
error
參數是在 Excel 儲存格中的內容未通過資料驗證時,顯示的錯誤資訊的內容。- prompt 參數
prompt
參數是在選取 Excel 儲存格時,顯示的提示資訊的內容。- errorTitle 參數
errorTitle
參數是在 Excel 儲存格中的內容未通過資料驗證時,顯示的錯誤資訊的標題。- imeMode 參數
imeMode
參數是一個表示輸入法模式的字串,他將在使用者編輯 Excel 儲存格時自動切換輸入法,imeMode
可以是以下取值之一,'noControl'
(不對 IME 進行任何控製),'off'
(關閉),'on'
(開啟),'disabled'
(停用),'hiragana'
(平假名),'fullKatakana'
(全形片假名),'halfKatakana'
(半形片假名),'fullAlpha'
(全形字母數值),'halfAlpha'
(半形字母數值),'fullHangul'
(全形韓語),'halfHangul'
(半形韓語)。需要指出的是,並非所有的 Office 都會支援輸入法的自動切換功能,該功能是否有效可能會與其他設定相關。
- operator 參數
operator
參數是一個表示運算方式的字串,他與formula1
,formula2
兩個參數一起完成資料的驗證,可以是以下取值之一,'between'
(在某個範圍之間),'notBetween'
(不在某個範圍之間),'equal'
(等於),'notEqual'
(不等於),'lessThan'
(小於),'lessThanOrEqual'
(小於等於),'greaterThan'
(大於),'greaterThanOrEqual'
(大於等於)。
Python openpyxl 套件的 DataValidation 物件的變數
Pythonopenpyxl
套件的DataValidation
物件擁有一些變數,在未作出修改時,他們的值和名稱與DataValidation
建構子的參數相同。
另外,DataValidation
物件擁有與sqref
變數作用相同的cells
和ranges
變數(別名),擁有與showDropDown
變數作用相同的hide_drop_down
變數,擁有與allowBlank
變數作用相同的allow_blank
變數,擁有與type
變數作用相同的validation_type
變數。
使用 Python openpyxl 套件的 Worksheet 物件取得和設定 Excel 工作表中的資料驗證
Pythonopenpyxl
套件的Worksheet
物件的data_validations
變數是一個DataValidationList
物件,該物件的dataValidation
變數是一個包含了 Excel 工作表中所有資料驗證的 Python 串列,通過此 Python 串列可以取得或設定某個資料驗證。
在下面的範例中,我們讀取了 Excel 工作表Students
中的資料驗證,並修改了其中第二個資料驗證,新增了錯誤資訊的標題和內容。
# 開啟 Data.xlsx 中的工作表 Students
from openpyxl import load_workbook
workbook = load_workbook('Data.xlsx')
worksheet = workbook['Students']
dvs = worksheet.data_validations.dataValidation
# 顯示 Excel 工作表中所有的資料驗證
for dv in dvs:
print(dv)
# 修改第二個資料驗證
dv = dvs[1]
dv.errorTitle = '請選擇一項'
dv.error = '只能選擇男或女'
workbook.save('Save.xlsx')
<openpyxl.worksheet.datavalidation.DataValidation object>
Parameters:
sqref=<MultiCellRange [A1:A1002]>, showDropDown=False, showInputMessage=False, showErrorMessage=True, allowBlank=True, errorTitle=None, error=None, promptTitle=None, prompt=None, type='textLength', errorStyle='stop', imeMode=None, operator='between', formula1='2', formula2='4'
<openpyxl.worksheet.datavalidation.DataValidation object>
Parameters:
sqref=<MultiCellRange [B1:B1002]>, showDropDown=False, showInputMessage=False, showErrorMessage=True, allowBlank=True, errorTitle=None, error=None, promptTitle=None, prompt=None, type='list', errorStyle='stop', imeMode=None, operator='equal', formula1='"男,女"', formula2='0'
使用 Python openpyxl 套件的 Worksheet 物件為 Excel 工作表新增資料驗證
通過 Pythonopenpyxl
套件的Worksheet
物件的add_data_validation
方法,或者Worksheet
物件的data_validations
變數的append
方法,可以為 Excel 工作表新增一個資料驗證。
worksheet.add_data_validation(data_validation)
worksheet.data_validations.append(data_validation)
- data_validation 參數
data_validation
參數是一個openpyxl
DataValidation
物件,表示被新增的 Excel 資料驗證。
在下面的範例中,我們為Students
工作表新增了兩個資料驗證,第一個驗證要求儲存格的內容為0
到100
之間的整數,第二個驗證要求儲存格的內容長度小於等於5
,第三個驗證要求儲存格的內容為大於1.5
的小數。
# …
# 開啟 Data.xlsx 中的工作表 Students
from openpyxl import load_workbook
wb = load_workbook('Data.xlsx')
ws = wb['Students']
from openpyxl.worksheet.datavalidation import DataValidation
from openpyxl.worksheet.cell_range import MultiCellRange, CellRange
# 為 C1:C1001 新增資料驗證,只能輸入在 0 之間 100 的整數
newDV = DataValidation(
'whole', 0, 100,
sqref='C1:C1001', imeMode='off', operator='between'
)
ws.add_data_validation(newDV)
# 為 D1:D2,D4:D5 兩個範圍新增資料驗證,內容長度需要小於等於 5
ws.data_validations.append(DataValidation(
'textLength', 5,
sqref=(CellRange('D1:D2'), CellRange('D4:D5')), operator='lessThanOrEqual'
))
# 為 E1:E2,E4:E5 兩個範圍新增資料驗證,小數需要大於 1.5
ws.add_data_validation(DataValidation(
'decimal', 1.5,
sqref=MultiCellRange(['E1:E2', 'E4:E5']), operator='greaterThan'
))
wb.save('Add.xlsx')
程式碼
src/zh-hant/openpyxl/data/validations·codebeatme/office-programming·GitHub