今天在用openpyxl读取表格信息时,需要根据表格中单元格的数据有效性设置中的序列内容来进行下一步操作判断。但是对于如何获取该序列的字符串值一点也不了解,网上查找资料只找到用DataValidation模块可以给单元格设置数据有效性验证,但对于表格中原有的单元格数据有效性设置信息的获取方法却没发现有介绍。于是自己打开openpyxl模块源文件进行研究,颇为费了一番功夫后终于解决了这个问题。
比如,现在有一个名为test.xlsx的文件,其中A1至A5共5个单元格设置了数据有效性验证,限定输入数据为“足球,篮球,排球”这个序列中的三种球类的名称。
想要读取哪些单元格设置了什么样的限定序列可以用如下代码:
import openpyxl
wb = openpyxl.open('test.xlsx')
ws = wb.active
print(ws['A1'].value)
# 输出:足球
print(ws.data_validations.dataValidation[0].formula1)
# 输出:"足球,篮球,排球"。
print(type(ws.data_validations.dataValidation[0].sqref))
# 输出:
print(ws.data_validations.dataValidation[0].sqref)
# 输出:A1:A5
可见,能获取到设置数据有效性验证的单元格为A1:A5,数据限定序列为“足球,篮球,排球”。
细心的朋友可能会发现:ws.data_validations.dataValidation[0]是Python中序列的索引引用呐。
事实上,ws.data_validations.dataValidation就是一个列表一样的对象,保存了该工作表中所有的数据有效性验证的种类及其涉及的单元格。
如果test.xlsx中A1至A5单元格设置了数据有效性验证限定数据为“足球,篮球,排球”这个序列,同时B1至B5单元格设置了数据有效性验证限定数据为“甲,乙,丙”这个序列。
那么,此时:
print(ws.data_validations.dataValidation[0].formula1)
# 输出:"足球,篮球,排球"。
print(ws.data_validations.dataValidation[0].sqref)
# 输出:A1:A5
print(ws.data_validations.dataValidation[1].formula1)
# 输出:"甲,乙,丙"。
print(ws.data_validations.dataValidation[1].sqref)
# 输出:B1:B5



