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

    如何使用 openpyxl 驗證 Excel 資料?DataValidation 物件介紹

    閱讀 9:50·字數 2954·更新 
    Youtube 頻道
    訂閱 375

    openpyxl Excel 資料驗證物件 DataValidation

    openpyxl套件的DataValidation類別,屬於模組openpyxl.worksheet.datavalidation,用於表示與 Excel 儲存格相關的資料驗證。一個資料驗證可以針對一個儲存格,也可以針對一個範圍,工作表所包含的資料驗證,可通過Worksheet物件的data_validations變數進行檢視,具體可以檢視取得和設定工作表中的資料驗證一段。

    建立 Excel 資料驗證

    你可以使用DataValidation物件的建構子,建立新的 Excel 資料驗證,然後通過Worksheet物件將其新增到工作表中,具體可以檢視為工作表新增資料驗證一段。

    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參數是一個字串,用於指示將儲存格中的內容作為哪種資料型別進行驗證,可以是以下取值之一,'whole'(整數),'decimal'(小數),'list'(內容需要存在於串列中),'date'(日期),'time'(時間),'textLength'(內容的長度),'custom'(根據formula1參數給出的公式進行驗證)。如果type參數為None,則允許輸入任何型別的資料。

    formula1,formula2 參數

    formula1參數和formula2參數是兩個表示公式的字串,這些公式被用於資料驗證,比如,要判斷數值是否在310之間,那麽formula1應該為'3'formula2應該為'10'。這裏需要指出,一些資料驗證僅會用到參數formula1所表示的公式。

    如果type參數為'list',那麽formula1表示的是串列中的項,兩個項之間需要使用逗號進行分隔,所有項需要使用雙引號括住,比如'"是,否,不確定"'

    showErrorMessage 參數

    showErrorMessage參數用於設定在儲存格中的內容未通過資料驗證時,是否顯示相關的錯誤資訊。預設值為False,不顯示錯誤資訊。

    showInputMessage 參數

    showInputMessage參數用於設定在選取儲存格時,是否顯示相關提示資訊以提示使用者如何進行輸入。預設值為False,不顯示提示資訊。

    showDropDown 參數

    showDropDown參數用於設定在選取儲存格時,是否顯示清單方塊,該參數在type參數為'list'時有效。在一些 Office 軟體中,showDropDown參數為False表示顯示清單方塊。

    allowBlank,allow_blank 參數

    allowBlank參數和allow_blank參數用於設定是否允許儲存格為空。預設值為False,不允許為空。

    sqref 參數

    sqref參數用於設定對哪些儲存格進行資料驗證,該參數可以是某個儲存格或範圍的位址,也可以是一個MultiCellRange物件或包含CellRange物件的 Python 元組。

    promptTitle 參數

    promptTitle參數是在選取儲存格時,顯示的提示資訊的標題。

    errorStyle 參數

    errorStyle參數表示在儲存格中的內容未通過資料驗證時執行的操作,可以是以下取值之一,'stop'(輸入的內容會被復原),'warning'(顯示警告),'information'(顯示資訊)。

    error 參數

    error參數是在儲存格中的內容未通過資料驗證時,顯示的錯誤資訊的內容。

    prompt 參數

    prompt參數是在選取儲存格時,顯示的提示資訊的內容。

    errorTitle 參數

    errorTitle參數是在儲存格中的內容未通過資料驗證時,顯示的錯誤資訊的標題。

    imeMode 參數

    imeMode參數是一個表示輸入法模式的字串,他將在使用者編輯儲存格時自動切換輸入法,imeMode可以是以下取值之一,'noControl'(不對 IME 進行任何控製),'off'(關閉),'on'(開啟),'disabled'(停用),'hiragana'(平假名),'fullKatakana'(全形片假名),'halfKatakana'(半形片假名),'fullAlpha'(全形字母數值),'halfAlpha'(半形字母數值),'fullHangul'(全形韓語),'halfHangul'(半形韓語)。

    需要指出的是,並非所有的 Office 都會支援輸入法的自動切換功能,該功能是否有效可能會與其他設定相關。

    operator 參數

    operator參數是一個表示運算方式的字串,他與formula1formula2兩個參數一起完成資料的驗證,可以是以下取值之一,'between'(在某個範圍之間),'notBetween'(不在某個範圍之間),'equal'(等於),'notEqual'(不等於),'lessThan'(小於),'lessThanOrEqual'(小於等於),'greaterThan'(大於),'greaterThanOrEqual'(大於等於)。

    DataValidation 物件的變數

    DataValidation物件擁有一些變數,在未作出修改時,他們的值和名稱與DataValidation建構子的參數相同。

    另外,DataValidation物件擁有與sqref變數作用相同的cellsranges變數(別名),擁有與showDropDown變數作用相同的hide_drop_down變數,擁有與allowBlank變數作用相同的allow_blank變數,擁有與type變數作用相同的validation_type變數。

    取得和設定 Excel 工作表中的資料驗證

    Worksheet物件的data_validations變數是一個DataValidationList物件,該物件的dataValidation變數是一個包含了 Excel 工作表中所有資料驗證的 Python 串列,通過此 Python 串列可以取得或設定某個資料驗證。

    在下面的範例中,我們讀取了工作表Students中的資料驗證,並修改了其中第二個資料驗證,新增了錯誤資訊的標題和內容。

    validation.py
    # 開啟 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'

    為 Excel 工作表新增資料驗證

    通過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參數是一個DataValidation物件,表示被新增的資料驗證。

    在下面的範例中,我們為Students工作表新增了兩個資料驗證,第一個驗證要求儲存格的內容為0100之間的整數,第二個驗證要求儲存格的內容長度小於等於5,第三個驗證要求儲存格的內容為大於1.5的小數。

    add_validation.py
    # …
    # 開啟 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