使用Python在Excel工作表中设置数据验证

 更新时间:2026年05月12日 09:21:03   作者:大丸子  
在企业数据管理和报表系统中,数据的准确性和规范性至关重要,手动在 Excel 中设置数据验证虽然可行,但当需要批量处理多个文件或统一验证规则时,效率低下且容易遗漏,本文将使用 Free Spire.XLS for Python 演示如何在 Excel 工作表中设置多种类型的数据验证

引言

在企业数据管理和报表系统中,数据的准确性和规范性至关重要。无论是员工信息录入、财务数据填报还是库存信息维护,都需要确保用户输入的数据符合业务规则。手动在 Excel 中设置数据验证虽然可行,但当需要批量处理多个文件或统一验证规则时,效率低下且容易遗漏。通过 Python 程序自动化设置 Excel 数据验证,不仅可以快速批量处理,还能保证规则的一致性和可追溯性。

本文将使用 Free Spire.XLS for Python 演示如何在 Excel 工作表中设置多种类型的数据验证,包括下拉列表、整数范围、小数范围、日期区间、文本长度和时间范围等,并结合实际业务场景帮助你理解数据验证的应用价值。

本文使用的方法需要用到 Free Spire.XLS for Python,可通过 pip 安装:

pip install spire.xls.free

1. 初始化工作簿和工作表

首先创建一个新的 Excel 工作簿,并获取第一个工作表用于设置数据验证:

from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "员工信息录入"
sheet.Range["A1"].Text = "所属部门"
sheet.Range["B1"].Text = "员工年龄"
sheet.Range["C1"].Text = "绩效得分"
sheet.Range["D1"].Text = "入职日期"
sheet.Range["E1"].Text = "员工工号"
sheet.Range["F1"].Text = "上班时间"

操作说明
这里新建了一个 Excel 工作簿并获取第一个工作表,命名为"员工信息录入"。我们在第一行设置了六个字段的表头,后续将针对每个字段设置不同的数据验证规则,确保录入数据的规范性。

2. 下拉列表验证(部门选择)

在实际业务中,员工所属部门通常是固定的几个选项,例如"人事部""财务部""技术部""市场部"。通过下拉列表验证,可以避免用户输入错误的部门名称,确保数据的统一性。

sheet.Range["A2"].Text = "可选部门:"
sheet.Range["A3"].Text = "人事部"
sheet.Range["A4"].Text = "财务部"
sheet.Range["A5"].Text = "技术部"
sheet.Range["A6"].Text = "市场部"
dept_cell = sheet.Range["B2"]
dept_cell.DataValidation.DataRange = sheet.Range["A3:A6"]
dept_cell.DataValidation.ShowError = True
dept_cell.DataValidation.AlertStyle = AlertStyleType.Stop
dept_cell.DataValidation.ErrorTitle = "输入错误"
dept_cell.DataValidation.ErrorMessage = "请从下拉列表中选择部门!"
dept_cell.DataValidation.ShowInput = True
dept_cell.DataValidation.InputTitle = "选择部门"
dept_cell.DataValidation.InputMessage = "请从固定部门列表中选择。"

使用场景:避免部门名称不统一(如"技术""技术部"混用),确保人事系统中的部门数据标准化。

保存文件后效果:

3. 整数验证(员工年龄)

员工年龄一般处于合理范围内,例如 18 到 60 岁。通过整数验证可以限制用户只能输入该范围内的整数值,避免出现异常数据。

sheet.Range["B1"].Text = "员工年龄 (18-60)"

age_cell = sheet.Range["B3"]
age_cell.DataValidation.AllowType = CellDataType.Integer
age_cell.DataValidation.CompareOperator = ValidationComparisonOperator.Between
age_cell.DataValidation.Formula1 = "18"
age_cell.DataValidation.Formula2 = "60"
age_cell.DataValidation.AlertStyle = AlertStyleType.Warning
age_cell.DataValidation.ShowError = True
age_cell.DataValidation.ErrorTitle = "年龄错误"
age_cell.DataValidation.ErrorMessage = "请输入 18 到 60 之间的整数!"
age_cell.DataValidation.InputMessage = "员工年龄验证"
age_cell.DataValidation.IgnoreBlank = True
age_cell.DataValidation.ShowInput = True

使用场景:保证录入的年龄数据合理,不会出现"5 岁员工"或"100 岁员工"的异常数据,确保人事数据的真实性和合规性。

保存文件后效果:

4. 小数验证(绩效得分)

员工的绩效考核得分通常是带小数的数值,例如 0 到 100 分之间的小数。通过小数验证可以确保绩效数据的精确性和合理性。

sheet.Range["C1"].Text = "绩效得分 (0-100)"

score_cell = sheet.Range["C2"]
score_cell.DataValidation.AllowType = CellDataType.Decimal
score_cell.DataValidation.CompareOperator = ValidationComparisonOperator.Between
score_cell.DataValidation.Formula1 = "0"
score_cell.DataValidation.Formula2 = "100"
score_cell.DataValidation.ShowError = True
score_cell.DataValidation.ErrorMessage = "绩效得分必须在 0 到 100 之间!"
score_cell.DataValidation.AlertStyle = AlertStyleType.Stop

使用场景:适用于绩效考核、评分统计等需要小数精度的场景,避免输入超出范围的分数或无效数值。

5. 日期验证(入职日期)

企业通常要求员工入职日期在某一合理区间内。例如,数据录入系统只允许选择 2023 年内的入职日期,以防止录入历史错误数据。

sheet.Range["D1"].Text = "入职日期 (2023年)"

hire_date_cell = sheet.Range["D2"]
hire_date_cell.DataValidation.AllowType = CellDataType.Date
hire_date_cell.DataValidation.CompareOperator = ValidationComparisonOperator.Between
hire_date_cell.DataValidation.Formula1 = "2023-01-01"
hire_date_cell.DataValidation.Formula2 = "2023-12-31"
hire_date_cell.DataValidation.ShowError = True
hire_date_cell.DataValidation.ErrorMessage = "请输入 2023 年的有效日期!"
hire_date_cell.DataValidation.AlertStyle = AlertStyleType.Warning

使用场景:确保入职时间不会超出考勤和人事系统设定范围,避免录入未来日期或过于久远的历史日期。

保存文件后效果:

6. 文本长度验证(员工工号)

工号通常有固定的位数规则,例如必须是 6 位字符。通过文本长度验证可以保证工号录入规范,便于后续系统识别和处理。

sheet.Range["E1"].Text = "员工工号 (6位)"

id_cell = sheet.Range["E2"]
id_cell.DataValidation.AllowType = CellDataType.TextLength
id_cell.DataValidation.CompareOperator = ValidationComparisonOperator.Equal
id_cell.DataValidation.Formula1 = "6"
id_cell.DataValidation.ShowError = True
id_cell.DataValidation.ErrorMessage = "工号必须为 6 位字符!"
id_cell.DataValidation.AlertStyle = AlertStyleType.Stop

使用场景:避免工号录入长度不一导致系统识别异常,确保所有工号格式统一,便于数据库存储和查询。

7. 时间验证(上班时间)

在考勤管理中,员工的上班时间通常需要在合理的时间范围内,例如上午 7:00 到 9:00 之间。通过时间验证可以规范考勤数据的录入。

sheet.Range["F1"].Text = "上班时间 (07:00-09:00)"

time_cell = sheet.Range["F2"]
time_cell.DataValidation.AllowType = CellDataType.Time
time_cell.DataValidation.CompareOperator = ValidationComparisonOperator.Between
time_cell.DataValidation.Formula1 = "07:00"
time_cell.DataValidation.Formula2 = "09:00"
time_cell.DataValidation.AlertStyle = AlertStyleType.Info
time_cell.DataValidation.ShowError = True
time_cell.DataValidation.ErrorTitle = "时间错误"
time_cell.DataValidation.ErrorMessage = "上班时间应在 07:00 到 09:00 之间!"
time_cell.DataValidation.InputMessage = "上班时间验证"
time_cell.DataValidation.IgnoreBlank = True
time_cell.DataValidation.ShowInput = True

使用场景:适用于考勤系统、排班管理等场景,确保时间数据的合理性,便于统计分析和薪资计算。

8. 保存文件并调整格式

完成所有验证规则设置后,调整工作表的格式并保存为 Excel 文件:

for col in range(1, 7):
    sheet.AutoFitColumn(col)
workbook.SaveToFile("DataValidation.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

说明
使用 AutoFitColumn 方法自动调整列宽,使数据显示更加美观。最后将工作簿保存为 Excel 2016 格式的文件,并释放资源。

关键类与属性总结

数据验证设置流程

  • 获取单元格范围:通过 sheet.Range["单元格地址"] 获取需要设置验证的单元格对象。
  • 设置验证类型:通过 DataValidation.AllowType 指定验证类型(整数、小数、日期、时间、文本长度等)。
  • 设置比较运算符:通过 DataValidation.CompareOperator 指定比较方式(Between、Equal、LessOrEqual 等)。
  • 设置验证条件:通过 Formula1 和 Formula2 设置验证参数值。
  • 配置提示信息:设置 ShowErrorErrorMessageShowInputInputMessage 等属性,提供用户友好的提示。
  • 保存文件:使用 SaveToFile 方法保存工作簿。

关键类与属性对照表

类 / 属性说明
Workbook表示 Excel 工作簿,用于创建和保存文件
Worksheet表示 Excel 工作表,所有操作都基于该对象
CellRange表示单元格或单元格区域
DataValidation用于设置单元格数据验证规则
AllowType指定验证类型(整数、小数、日期、时间、文本长度等)
CompareOperator指定比较运算符(Between、Equal、LessOrEqual 等)
Formula1 / Formula2用于设置验证条件的参数值
DataRange用于设置下拉列表的数据源范围
AlertStyle错误提示样式(Stop、Warning、Info)
ShowError是否显示错误提示
ErrorTitle错误提示标题
ErrorMessage错误提示信息
ShowInput是否显示输入提示
InputTitle输入提示标题
InputMessage输入提示信息
IgnoreBlank是否允许空值

总结

通过本文示例,你已经了解如何使用 Free Spire.XLS for Python 在 Excel 工作表中设置多种类型的数据验证,包括下拉列表、整数范围、小数范围、日期区间、文本长度和时间范围。从初始化工作簿到设置各类验证规则,整个过程高度自动化,特别适用于批量生成带有数据验证规则的 Excel 模板文件。

相比手动设置验证规则,代码方式具有以下优势:可以批量处理多个文件,保证规则一致性;可以轻松修改和扩展验证规则;可以与数据处理流程无缝集成。你可以在此基础上扩展更多能力,例如自定义公式验证、条件格式设置、批量数据导入等。

如果你正在处理员工信息录入、财务数据填报、库存管理等需要数据规范化验证的需求,这种基于 Python 的 Excel 数据验证方案将为你的工作带来显著提升。

以上就是使用Python在Excel工作表中设置数据验证的详细内容,更多关于Python Excel设置数据验证的资料请关注脚本之家其它相关文章!

相关文章

  • Python3利用openpyxl读写Excel文件的方法实例

    Python3利用openpyxl读写Excel文件的方法实例

    这篇文章主要给大家介绍了关于Python3利用openpyxl读写Excel文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python 获取域名到期时间的方法步骤

    python 获取域名到期时间的方法步骤

    这篇文章主要介绍了python 获取域名到期时间的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python列表推导式的使用方法

    Python列表推导式的使用方法

    这篇文章主要介绍了Python列表推导式的使用方法,大家参考使用吧
    2013-11-11
  • python如何通过跳板机连接MySQL

    python如何通过跳板机连接MySQL

    这篇文章主要介绍了python如何通过跳板机连接MySQL问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 基于Python编写MySQL数据库备份脚本

    基于Python编写MySQL数据库备份脚本

    这篇文章主要为大家详细介绍了一个使用Python编写的MySQL数据库备份脚本,包含压缩,日志记录和自动清理旧备份功能,有需要的可以参考一下
    2025-06-06
  • Python中使用MySQL模糊查询的详细方法

    Python中使用MySQL模糊查询的详细方法

    这篇文章主要介绍了Python中使用MySQL模糊查询的方法,以下是一个使用pymysql进行模糊查询的详细示例,包括安装库、连接数据库、执行查询以及处理结果,需要的朋友可以参考下
    2024-06-06
  • python字典的常用操作方法小结

    python字典的常用操作方法小结

    下面小编就为大家带来一篇python字典的常用操作方法小结。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-05-05
  • PyQt4 treewidget 选择改变颜色,并设置可编辑的方法

    PyQt4 treewidget 选择改变颜色,并设置可编辑的方法

    今天小编就为大家分享一篇PyQt4 treewidget 选择改变颜色,并设置可编辑的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python sklearn库实现简单逻辑回归的实例代码

    python sklearn库实现简单逻辑回归的实例代码

    Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,这篇文章主要介绍了python sklearn库实现简单逻辑回归的实例代码,需要的朋友可以参考下
    2019-07-07
  • pytorch和tensorflow计算Flops和params的详细过程

    pytorch和tensorflow计算Flops和params的详细过程

    这篇文章主要介绍了pytorch和tensorflow计算Flops和params,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论