如何使用 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/openpyxl/data/validations·codebeatme/office-programming·GitHub