Python获取Excel中的数据验证内容

本文将会介绍如何使用Python来获取Excel中的数据验证内容,即常见的下拉菜单。

笔者最近在工作中遇到了一个Excel解析的小问题,经一番努力终于解决,特于此记录。

在Excel文件中,如果单元格中存在下拉菜单,也就是数据验证内容,如下:

excel_validation.png

如果使用Python的pandas模块,那么是无法解析该单元格中的内容的。此时,需要使用openpyxl模块,用来获取单元格中的数据验证内容。

以上述的示例Excel文件为例,文件名为测试excel文档.xlsx

解析的Python代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# -*- coding: utf-8 -*-
# @place: Pudong, Shanghai
# @file: get_validation_from_excel.py
# @time: 2024/11/8 14:44
from openpyxl import load_workbook


def check_report_normal_file_process(file_path):
# 加载Excel文件
wb = load_workbook(file_path, data_only=True)
sheet = wb[wb.sheetnames[0]]

# 获取所有数据验证规则
dv = sheet.data_validations.dataValidation

validation_dict = {}
# 遍历所有数据验证规则
for validation in dv:
# 获取下拉菜单的来源
options = validation.formula1
if options.startswith('"') and options.endswith('"'):
# 如果是直接在单元格中指定的选项
options_list = options.strip('"').split(',')
elif options.startswith('='):
# 如果是一个范围引用,比如"=Sheet1!A1:A10"
range_ref = options[1:]
range_values = sheet[range_ref]
options_list = [_.value for row in range_values for _ in row]
else:
options_list = []

# 将选项添加到字典中
for cell in validation.cells:
validation_dict[cell] = options_list

return validation_dict


if __name__ == '__main__':
test_file_path = '../data/测试excel文件.xlsx'
t = check_report_normal_file_process(test_file_path)
print(t)

输出结果为:

{<CellRange A2>: ['中国', '日本', '美国', '韩国', '英国', '法国']}

输出内容为单元格所在位置及其数据验证列表。

因此,使用该解析方法可轻松获取Excel中的数据验证内容。

欢迎关注我的公众号NLP奇幻之旅,原创技术文章第一时间推送。

欢迎关注我的知识星球“自然语言处理奇幻之旅”,笔者正在努力构建自己的技术社区。


Python获取Excel中的数据验证内容
https://percent4.github.io/Python获取Excel中的数据验证内容/
作者
Jclian91
发布于
2025年1月8日
许可协议