今天在用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))

# 输出:<class 'openpyxl.worksheet.cell_range.MultiCellRange'>

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

补充:上述可直接读出序列内容的情况限于在设置数据有效性时,是直接输入序列。如下图

如果在设置数据有效性时是通过指定表格中某一区域内单元格的内容作为序列的,如下图:

这时再用前面的代码就不能直接得到"足球,篮球,排球"这样的结果了,而是会输出$G$1:$G$3。想要得到序列就需要加工一下。如下代码可以实现自动判断属于哪种情况,并将读出的序列存放到列表变量中:

import openpyxl
from openpyxl.utils.cell import coordinate_from_string, column_index_from_stringwb = openpyxl.open('test.xlsx')
ws = wb.active
a_list = []
for item in ws.data_validations.dataValidation:if 'A1' in item.sqref:if '$' in item.formula1:li = item.formula1.replace('$', '').split(':')col1, r1 = coordinate_from_string(li[0])col2, r2 = coordinate_from_string(li[1])c1 = column_index_from_string(col1)c2 = column_index_from_string(col2)for i in range(r1, r2+1):for j in range(c1, c2+1):a_list.append(ws.cell(i, j).value)else:a_list = item.formula1.replace('\"', '').split(',')break
wb.close()
print('"A1"单元格的数据有效性设置序列列表为:\n', a_list)

输出结果:

"A1"单元格的数据有效性设置序列列表为:
 ['足球', '篮球', '排球']

Python学习笔记——openpyxl读取工作表的数据有效性设置信息相关推荐

  1. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  2. Python学习笔记——数据分析之工作环境准备及数据分析建模理论基础

    目录 <Linkedln:2016年中国互联网最热职位人才库报告> Python3.x 常用的新特性 字符串编码格式回顾: DIKW 体系 数据建模基础 <Linkedln:2016 ...

  3. python学习笔记:读取xyz文件

    在药学的Ai研发过程中,经常要制作清洗文件和处理各种文件格式.利用openBabel这样功能能够大大减轻转换过程的麻烦.然而偶然也需要应对一下场景下处理xyz文件抽取相关的坐标体系去计算小分子之间的作 ...

  4. VBA 学习笔记 使用Excel工作表函数

    Excel中公式那么多现成的公式,可以直接调用. 比自己重新造轮子要方便许多,另外听说自己造的轮子不一定有人家亲生的快. Excel的公式与WorksheetFunction 对象下的方法对应.参数不 ...

  5. python 学习笔记 (核心)

    python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[ ...

  6. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  7. Python学习笔记:Python基础使用

    # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 人生苦短 我学PYTHON # # # # # # # # # # # ...

  8. Python学习笔记 day5

    Python学习笔记 day5 参考/引用资料: 1.file a.打开文件方式(读写两种方式) 缓冲 with语句 b.文件对象的操作方法 c.学习对excel及csv文件进行操作 读写excel ...

  9. Python学习笔记:第十五站 大宝藏

    Python学习笔记 文章目录 Python学习笔记 第十五站 大宝藏 1. 编码格式介绍 2. 文件的读写原理 3. 文件读写操作 4. 文件对象常用的方法 5. with语句(上下文管理器) 6. ...

最新文章

  1. 【2018.2.28】思考与练习
  2. c++ argmax
  3. 合并a[0..mid]和a[mid+1,n-1],其中这两个数组分别有序
  4. 7.Verilog 条件语句的应用
  5. 数据分层/ODS/DW/DM
  6. vue父组件异步获取动态数据传递给子组件获取不到值
  7. primefaces_通过OmniFaces缓存组件以编程方式缓存PrimeFaces图表
  8. 基于阿里云移动推送的移动应用推送模式最佳实践
  9. 由SQL数据库转换Redis的实例
  10. sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别(转)
  11. Win10系统利用注册表完美设置桌面图标的技巧
  12. 湖南高职高考计算机,20XX湖南高职对口高考常德市大联考计算机专业试卷(4月)[整理](8页)-原创力文档...
  13. 【unity3d游戏源码及软件】部分展示之:超级马里奥unity源码,内附更多源码
  14. 游戏开发新手快速入门指南
  15. 第一次安卓作业笔记:一个星座查询app
  16. Struts2实现文件上传和下载
  17. 软件测试入门知识了解
  18. 硬件设计——外围电路(晶振电路)
  19. 蓝色学校网站模板_中小学网站源码_学校网站管理系统
  20. html中form表单的使用方法和介绍

热门文章

  1. html导航栏中加竖线,前端导航栏标签中间的小竖线 实现方法
  2. imageio读取inputstream时照片底色变成粉红问题解决方法
  3. 十一、通过六个因素对织物起球等级进行预测
  4. Nidia的Deepstream,官方给的案例介绍,deepstream-test1\deepstream-tes2\deepstream-test5
  5. css当鼠标放到图片加边框的效果
  6. 缓和曲线04四次两段曲线
  7. RedHat 7.0 硬盘挂载操作
  8. 微信小程序 转发分享功能
  9. css-抖音字体效果
  10. 【转载】PC端微信设置操作快捷键方法