接上文Python开发从零开始-50.23-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。
2、数据验证
利用 Excel 的数据验证功能,用户可以设置数据输入规则,只有符合规则的数据才会被输入到单元格中,从而起到规范化数据输入的目的。数据验证在 Excel 2013 之前被称为 “数据有效性”。

数据验证的主要功能包括:
限制数据类型与范围:仅允许整数、小数、特定日期区间、时间段、文本长度等类型及其取值范围;
创建下拉列表:创建序列选项,让用户从预设内容中选择,避免手动输入错误;
自定义规则:通过公式设置复杂条件,如禁止重复值或限制输入范围;
输入引导与错误拦截:设置选中单元格时的提示消息,以及输入违规时的出错警告(分“停止/警告/信息”三级强度,可强制阻止或仅提示)。
openpyxl.worksheet.datavalidation.DataValidation 对象用于定义单元格数据验证规则。使用 DataValidation 对象实现单元格数据验证功能,需遵循以下步骤:
创建数据验证对象,并根据业务需求配置相关参数;
指定数据验证需要生效的单元格范围;
将数据验证规则添加到工作表。
(1)创建数据验证对象并配置参数
DataValidation 对象的构造函数原型如下:
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:字符串,验证数据类型,合法取值必须是以下字符串:
'whole':整数;
'decimal':浮点数(小数);
'list':序列(下拉列表)
'time':时间;
'date':日期;
'textLength':文本长度;
'custom':自定义(公式)。
formula1:字符串,验证条件的第一个值,配合 type 参数设置不同格式值:
当 type 参数为 'list' 时,静态列表传入逗号分隔的字符串(必须使用双引号,如 '"男, 女, 未知"'),动态引用使用单元格引用标识;
当 type 参数为 'custom' 时,传入公式字符串;
当 type 参数为其他类型时,传入对应值;
formula2:字符串,验证条件的第二个值,仅在 operator 参数设置为区间比较('between' 或 'notBetween')时使用;
operator:字符串,配合 type 参数使用,定义数值或长度的比较逻辑,合法取值必须是以下字符串:
'between':介于 formula1和 formula2 参数值之间;
'notBetween':不介于 formula1 和 formula2 参数值之间;
'lessThan':小于;
'greaterThan':大于;
'equal': 等于;
'notEqual' :不等于;
'lessThanOrEqual':小于或等于;
'greaterThanOrEqual':大于或等于。
showErrorMessage:布尔型,输入无效数据时是否弹出错误警告,设为 True 表示弹出警告;
showInputMessage:布尔型,选中单元格时是否显示输入提示,设为 True 表示显示提示;
showDropDown:布尔型,是否显示下拉列表,设为 True 表示显示列表。
allow_blank:布尔型,是否允许单元格留空,设为 False,用户必须输入符合规则的内容;
sqref:字符串,应用该验证规则的单元格区域引用,如 "A1:A10"。可在创建对象时设置,也可在对象创建后指定。
DataValidation 对象创建代码片段示例如下:
from openpyxl.worksheet.datavalidation import DataValidation# 创建下拉菜单dv_list = DataValidation(type="list",formula1='"男, 女, 未知"', # 注意:静态列表需用双引号包裹allow_blank=True,showErrorMessage=True,errorTitle="输入错误",error="请从下拉列表中选择性别")
(2)指定数据验证需要生效的单元格范围
# 指定数据验证应用单元格dv_list.sqref = "A2"
(3)将数据验证规则添加到工作表
可以使用 DataValidation 对象的 add_data_validation() 方法将数据验证规则添加到工作表。代码片段示例如下:
# 必须执行此步骤,否则验证规则不会生效ws.add_data_validation(dv_list)
(4)数据验证完整代码
from openpyxl import Workbookfrom openpyxl.worksheet.datavalidation import DataValidationwb = Workbook()ws = wb.active# 创建下拉菜单dv_list = DataValidation(type="list",# 注意:静态列表需用双引号包裹formula1='"男, 女, 未知"',allow_blank=True,showErrorMessage=True,errorTitle="输入错误",error="请从下拉列表中选择性别")# 指定数据验证应用单元格dv_list.sqref = "A2"ws['A1'].value = "性别"# 必须执行此步,否则规则不会生效ws.add_data_validation(dv_list)wb.save("excel_validation1.xlsx")
代码执行后,生成 excel_validation1.xlsx 文档,文档提供数据验证下拉列表(注意:需点击 A2 单元格出现)。效果示例如下图:

如果在数据验证应用单元格内输入不合规数据,将会提示错误。

本文仅介绍了 DataValidation 对象最简单示例,大家可以参考官网文档和网络教程熟悉和了解其复杂使用。
受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件的相关知识。
夜雨聆风