Python实例:openpyxl读写单元格

news2024/10/6 2:26:21

原文链接:http://www.juzicode.com/python-example-openpyxl-access-data

本文介绍openpyxl模块几种读写单元格的方法,先手动创建一个表格,在代码里先用load_workbook()方法读取这个表格生成一个Workbook对象wb,再通过wb得到一个Worksheet实例ws,然后在ws的基础上访问单元格。

1)iter_rows()和iter_cols()方法

openpyxl支持整行或者整列的读出,这需要用到Worksheet的iter_rows()和iter_cols()方法

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')  # 第1步访问文件
ws = wb['软件']                      # 第2步访问工作表 
print('多行访问:')
for row in ws.iter_rows(): # 迭代读出
    print(row)    
print('多列访问:')
for col in ws.iter_cols(): # 迭代读出
    print(col)

运行结果:

多行访问:
(<Cell '软件'.A1>, <Cell '软件'.B1>, <Cell '软件'.C1>, <Cell '软件'.D1>, <Cell '软件'.E1>)
(<Cell '软件'.A2>, <Cell '软件'.B2>, <Cell '软件'.C2>, <Cell '软件'.D2>, <Cell '软件'.E2>)
(<Cell '软件'.A3>, <Cell '软件'.B3>, <Cell '软件'.C3>, <Cell '软件'.D3>, <Cell '软件'.E3>)
多列访问:
(<Cell '软件'.A1>, <Cell '软件'.A2>, <Cell '软件'.A3>)
(<Cell '软件'.B1>, <Cell '软件'.B2>, <Cell '软件'.B3>)
(<Cell '软件'.C1>, <Cell '软件'.C2>, <Cell '软件'.C3>)
(<Cell '软件'.D1>, <Cell '软件'.D2>, <Cell '软件'.D3>)
(<Cell '软件'.E1>, <Cell '软件'.E2>, <Cell '软件'.E3>)

这种方法获取到的是单元格实例,还可以进一步地通过访问Cell对象的value属性获取到单元格的内容: 

for row in ws.iter_rows(): # 迭代读出
    for r in row:
        print(r.value)

如果不想返回单元格实例而是返回单元格的值,也可以在调用Worksheet的iter_rows()和iter_cols()方法时传入入参values_only=True,就能直接得到单元格的值:

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')   # 第1步访问文件
ws = wb['软件']                      # 第2步访问工作表 
print('多行访问:')
for row in ws.iter_rows(values_only=True): # 迭代读出
    print(row)
print('多列访问:')   
for col in ws.iter_cols(values_only=True): # 迭代读出
    print(col)

运行结果:

多行访问:
('name', 'job', 'company', 'sex', 'contact')
('桔子菌', '软件捉虫工', '桔子code有限公司', 'M', 'VX公众号:juzicode')
('何橙子', '软件布虫工', '桔子code有限公司', 'F', 'www.juzicode.com')
多列访问:
('name', '桔子菌', '何橙子')
('job', '软件捉虫工', '软件布虫工')
('company', '桔子code有限公司', '桔子code有限公司')
('sex', 'M', 'F')
('contact', 'VX公众号:juzicode', 'www.juzicode.com')

当然你还可以在调用iter_rows()和iter_cols()方法时填写min_row,max_row等参数指定访问表格的范围,范围限定在这些指定值的闭区间。

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')   # 第1步访问文件
ws = wb['汇总']                      # 第2步访问工作表 
print('多行访问:')
for row in ws.iter_rows(values_only=True, min_row=1, max_row=3, min_col=2, max_col=5): # 迭代读出
    print(row)

运行结果:

多行访问:
('job', 'company', 'sex', 'contact')
('软件捉虫工', '桔子code有限公司', 'M', 'VX公众号:juzicode')
('软件布虫工', '桔子code有限公司', 'F', 'www.juzicode.com')

2)下标方式访问多行多列

上面这个例子通过min_row=1, max_row=3, min_col=2, max_col=5限定了访问范围,返回了第1~3行,第2~5列单元格的内容。这时还可以通过指定单元格的名称来限定访问范围,达到同样的目的,仍然是第1~3行,第2~5列,则可以用[‘B1′:’E3’]表示,其中列号用字母,行号用数字组合起来表示。

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')   # 第1步访问文件
ws = wb['汇总']                      # 第2步访问工作表 
print('多行多列访问:')
cell_range = ws['B1':'E3']   # 下标方式指定行列的范围
#print('cell_range:',cell_range)
for cells in cell_range:  # cells为多个同一行的cell组成的tuple
    print(cells)
    for c in cells:       # 单个访问cell
        print(c,c.value) 

运行结果:

多行多列访问:
(<Cell '汇总'.B1>, <Cell '汇总'.C1>, <Cell '汇总'.D1>, <Cell '汇总'.E1>)
<Cell '汇总'.B1> job
<Cell '汇总'.C1> company
<Cell '汇总'.D1> sex
<Cell '汇总'.E1> contact
(<Cell '汇总'.B2>, <Cell '汇总'.C2>, <Cell '汇总'.D2>, <Cell '汇总'.E2>)
<Cell '汇总'.B2> 软件捉虫工
<Cell '汇总'.C2> 桔子code有限公司
<Cell '汇总'.D2> M
<Cell '汇总'.E2> VX公众号:juzicode
(<Cell '汇总'.B3>, <Cell '汇总'.C3>, <Cell '汇总'.D3>, <Cell '汇总'.E3>)
<Cell '汇总'.B3> 软件布虫工
<Cell '汇总'.C3> 桔子code有限公司
<Cell '汇总'.D3> F
<Cell '汇总'.E3> www.juzicode.com

3)下标方式访问整行整列

还可以通过Worksheet实例的下标方式访问多行多列。如果下标为整型数值对应访问行,如果下标为字符串型数值则对应访问列。如果要得到多行多列的Cell实例可以通过冒号间隔下标,这点和numpy数据下标访问方法类似。比如下面的例子中ws[1]表示第一行的cell,ws[1:3]表示第1-3行cell:

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')  
ws = wb['汇总']                      
print(ws[1])       # 第1行的cell
print(ws['A'])     # 第A列的cell

print(ws[1:3])     # 第1-3行cell
print(ws['A':'C']) # 第A-C列cell

运行结果:

(<Cell '汇总'.A1>, <Cell '汇总'.B1>, <Cell '汇总'.C1>, <Cell '汇总'.D1>, <Cell '汇总'.E1>)
(<Cell '汇总'.A1>, <Cell '汇总'.A2>, <Cell '汇总'.A3>, <Cell '汇总'.A4>, <Cell '汇总'.A5>, <Cell '汇总'.A6>)
((<Cell '汇总'.A1>, <Cell '汇总'.B1>, <Cell '汇总'.C1>, <Cell '汇总'.D1>, <Cell '汇总'.E1>), (<Cell '汇总'.A2>, <Cell '汇总'.B2>, <Cell '汇总'.C2>, <Cell '汇总'.D2>, <Cell '汇总'.E2>), (<Cell '汇总'.A3>, <Cell '汇总'.B3>, <Cell '汇总'.C3>, <Cell '汇总'.D3>, <Cell '汇总'.E3>))
((<Cell '汇总'.A1>, <Cell '汇总'.A2>, <Cell '汇总'.A3>, <Cell '汇总'.A4>, <Cell '汇总'.A5>, <Cell '汇总'.A6>), (<Cell '汇总'.B1>, <Cell '汇总'.B2>, <Cell '汇总'.B3>, <Cell '汇总'.B4>, <Cell '汇总'.B5>, <Cell '汇总'.B6>), (<Cell '汇总'.C1>, <Cell '汇总'.C2>, <Cell '汇总'.C3>, <Cell '汇总'.C4>, <Cell '汇总'.C5>, <Cell '汇总'.C6>))

注意这种方式和前面通过下标方式访问多行多列有所区别,这种方式只能得到整行或整列的cell,并不能得到一个“矩形”状的多行多列cell。

4) Worksheet的vaules属性

还可以通过Worksheet的vaules属性直接得到单元格的值:

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx') 
ws = wb['汇总']                   
print(ws.values)
for value in ws.values:
    print(value)

运行结果:

<generator object Worksheet.values at 0x000001F3F9167A70>
('name', 'job', 'company', 'sex', 'contact')
('桔子菌', '软件捉虫工', '桔子code有限公司', 'M', 'VX公众号:juzicode')
('何橙子', '软件布虫工', '桔子code有限公司', 'F', 'www.juzicode.com')
('柚子菌', '硬件抠图工', '桔子code有限公司', 'F', 'VX公众号:桔子code')
('王金桔', '焊工', '橙子加工工厂', 'M', 'VX公众号:桔子code')
('赵沃柑', '维修工', '桔子电子信息有限公司', 'F', '1008611')

5) Worksheet的rows,colnums属性

也可以通Worksheet的rows,colnums属性访问单元格,他们会返回单元格对象生成器,通过for循环能得到单元格Cell对象:

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')  
ws = wb['汇总']                      
print(ws.rows)
for row in ws.rows:
    print(row)

#juzicode.com/VX公众号:juzicode
from openpyxl import load_workbook
wb = load_workbook('profile.xlsx')  
ws = wb['汇总']                      
print(ws.columns)   
for col in ws.columns:
    print(col)

运行结果:

<generator object Worksheet._cells_by_row at 0x00000214C7FF7990>
(<Cell '汇总'.A1>, <Cell '汇总'.B1>, <Cell '汇总'.C1>, <Cell '汇总'.D1>, <Cell '汇总'.E1>)
(<Cell '汇总'.A2>, <Cell '汇总'.B2>, <Cell '汇总'.C2>, <Cell '汇总'.D2>, <Cell '汇总'.E2>)
(<Cell '汇总'.A3>, <Cell '汇总'.B3>, <Cell '汇总'.C3>, <Cell '汇总'.D3>, <Cell '汇总'.E3>)
(<Cell '汇总'.A4>, <Cell '汇总'.B4>, <Cell '汇总'.C4>, <Cell '汇总'.D4>, <Cell '汇总'.E4>)
(<Cell '汇总'.A5>, <Cell '汇总'.B5>, <Cell '汇总'.C5>, <Cell '汇总'.D5>, <Cell '汇总'.E5>)
(<Cell '汇总'.A6>, <Cell '汇总'.B6>, <Cell '汇总'.C6>, <Cell '汇总'.D6>, <Cell '汇总'.E6>)

<generator object Worksheet._cells_by_col at 0x00000214C7FF7A00>
(<Cell '汇总'.A1>, <Cell '汇总'.A2>, <Cell '汇总'.A3>, <Cell '汇总'.A4>, <Cell '汇总'.A5>, <Cell '汇总'.A6>)
(<Cell '汇总'.B1>, <Cell '汇总'.B2>, <Cell '汇总'.B3>, <Cell '汇总'.B4>, <Cell '汇总'.B5>, <Cell '汇总'.B6>)
(<Cell '汇总'.C1>, <Cell '汇总'.C2>, <Cell '汇总'.C3>, <Cell '汇总'.C4>, <Cell '汇总'.C5>, <Cell '汇总'.C6>)
(<Cell '汇总'.D1>, <Cell '汇总'.D2>, <Cell '汇总'.D3>, <Cell '汇总'.D4>, <Cell '汇总'.D5>, <Cell '汇总'.D6>)
(<Cell '汇总'.E1>, <Cell '汇总'.E2>, <Cell '汇总'.E3>, <Cell '汇总'.E4>, <Cell '汇总'.E5>, <Cell '汇总'.E6>)

更多应用实例公众号【桔子code】后台回复【openpyxl】获取下载链接。

扩展阅读:

  1. Python轮子:Excel读写利器——openpyxl – 桔子code (juzicode.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

indexedDB---掌握浏览器内建数据库的基本用法

1.认识indexedDB IndexedDB 是一个浏览器内建的数据库&#xff0c;它可以存放对象格式的数据&#xff0c;类似本地存储localstore&#xff0c;但是相比localStore 10MB的存储量&#xff0c;indexedDB可存储的数据量远超过这个数值&#xff0c;具体是多少呢&#xff1f; 默认情…

将WIN10的wifi上网分享给以太网接口

目录 打开网络设置设置属性点这里的设置将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次 打开网络设置 设置属性 点这里的设置 将wlan主机的以太网接口IP设为自动获取 如果连接不成功&#xff0c;拔网线重连一次

什么是N卡和A卡?有什么区别?

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是N卡和A卡&#xff1f;有什么区别&#xff1f;…

Desoutter智能拧紧中枢Connect过压维修

马头智能拧紧中枢过压维修是马头拧紧设备维护中的重要环节。当出现马头拧紧设备中枢过压现象时&#xff0c;会导致设备性能下降&#xff0c;甚至损坏设备&#xff0c;因此及时对过压中枢进行维修是保障设备正常运转的关键。 Desoutter电动螺丝刀控制器过压的原因可能有很多&am…

数学建模系列(3/4):典型建模方法

目录 引言 1. 回归分析 1.1 线性回归 基本概念 Matlab实现 1.2 多元回归 基本概念 Matlab实现 1.3 非线性回归 基本概念 Matlab实现 2. 时间序列分析 2.1 时间序列的基本概念 2.2 移动平均 基本概念 Matlab实现 2.3 指数平滑 基本概念 Matlab实现 2.4 ARIM…

HarmonyOS Next 系列之沉浸式状态实现的多种方式(七)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

《计算机英语》测试练习题

作业3 一、单选题 内存条 的英文翻译是 A. memory chip (内存条通常指的是内存条上的存储芯片&#xff0c;但整个内存条的英文翻译应为 "RAM"&#xff0c;即 Random Access Memory 随机存取存储器) capacitor的中文意思是 D. 电容器 relay 的解释是 A. 继电器 por…

一、docker简介及卸载、安装

目录 一、Docker 简介 二、dockers三要素 1、Docker镜像&#xff08;image&#xff09; 2、Docker仓库 3、Docker容器 三、docker架构图 四. Docker 运行的基本流程 五、docker 卸载 1、停止docker服务 2、查看yum安装的docker文件包 3、查看docker相关的rpm源文件 …

ardupilot开发 --- Jetson Orin Nano 后篇

我拼命加速&#xff0c;但贫穷始终快我一步 0~1920. visp-d455&#xff1a;基于IBVS的Pixhawk无人机视觉伺服20.1 基础关于连接、通讯、UDP forward服务&#xff1a;一些相关的、有用的例程Linux C程序的gdb断点调试搭建仿真解决【testPixhawkDroneTakeoff.cpp例程能解锁但起飞…

优选免单模式:电商销售的新篇章

随着电商市场的日益繁荣&#xff0c;各种创新销售模式层出不穷。其中&#xff0c;优选免单模式以其独特的运作方式和激励机制&#xff0c;吸引了大量消费者的目光。该模式的核心在于通过降低商品售价、引入社交元素以及设计阶梯式奖励&#xff0c;激发消费者的购买热情&#xf…

[已解决]ImportError: DLL load failed while importing win32api: 找不到指定的程序。

使用pip install pywin32302安装后import找不到win32api 失败尝试 上网找别人的解决方案&#xff0c;大部分解决方案都是通过复制下面两个dll文件到 下面这个文件夹&#xff0c;并且复制到C:\Windows\System32&#xff0c;从而解决问题&#xff0c;但是我没能成功。 解决方…

Python编辑器pycharm详细安装步骤

PyCharm 的详细安装步骤 以下是在 Windows 系统上安装 PyCharm 的详细步骤&#xff1a; 第一步&#xff1a;下载安装程序 访问 PyCharm 官方网站&#xff08;https://www.jetbrains.com/pycharm/&#xff09;&#xff0c;根据自己的需求选择社区版&#xff08;Community&…

分享uniapp + Springboot3+vue3小程序项目实战

分享uniapp Springboot3vue3小程序项目实战 经过10天敲代码&#xff0c;终于从零到项目测试完成&#xff0c;一个前后端分离的小程序实战项目学习完毕 时间从6月12日 到6月22日&#xff0c;具有程序开发基础&#xff0c;第一次写uniapp,Springboot以前用过&#xff0c;VUE3也…

docker in docker 在CI中应用解析

docker in docker 简介 docker里嵌套运行docker&#xff0c;本文讲解其在jenkins和gitlab-runner 种的调用流程 一、用于jenkins 容器化部署jenkins时调用docker命令集成CI功能 [rootops-demo~]# docker inspect jenkins --format"{{json .Mounts}}" [{"T…

电脑文件夹怎么加密?文件夹加密的5种方法

在数字化时代&#xff0c;信息安全显得尤为重要。对于个人电脑用户来说&#xff0c;文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法&#xff0c;帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一&#xff1a;利用Windows系统自带的…

docker 基本用法及跨平台使用

一、Docker的优点 docker 主要解决的问题就是程序开发过程中编译和部署中遇到的环境配置的问题。 1.1 Docker与其他虚拟机层次结构的区别** 运行程序重点关注点在于环境。 VM虚拟机是基于Hypervisor虚拟化服务运行的。 Docker是基于内核的虚拟化技术实现的。 1.2 Docker的技…

深入分析并可视化城市轨道数据

介绍 中国城市化进程加速中&#xff0c;城市轨道交通的迅速扩张成为提升城市运行效率和居民生活品质的关键。这一网络从少数大城市延伸至众多大中型城市&#xff0c;映射了经济飞跃和城市管理现代化。深入分析并可视化城市轨道数据&#xff0c;对于揭示网络特性、评估效率、理…

计算机组成原理 | 数据的表示、运算和校验(3)数据处理与存储

移位 舍入和扩展 存储模式和对齐 不按边界对齐&#xff0c;访存次数会增加一次

大型语言模型在AMD GPU上的推理优化

Large language model inference optimizations on AMD GPUs — ROCm Blogs 大型语言模型&#xff08;LLMs&#xff09;已经改变了自然语言处理和理解&#xff0c;促进了在多个领域中的众多人工智能应用。LLMs在包括AI助手、聊天机器人、编程、游戏、学习、搜索和推荐系统在内的…

8个腾讯,18个阿里,104个百度

8个腾讯、18个阿里巴巴、104个百度!英伟达市值已经超越我的前司微软&#xff0c;成为全球第一&#xff0c;&#xff08;虽然今天又被微软超越&#xff0c;但势头非常猛&#xff09;达到了恐怖的3.34万亿美元&#xff01;这是什么概念&#xff1f;相当于8个腾讯&#xff0c;18个…