python—openpyxl操作excel详解

前言

openpyxl属于第三方模块,在python中用来处理excel文件。

可以对excel进行的操作有:读写、修改、调整样式及插入图片等。

但只能用来处理【 .xlsx】 后缀的excel文件。

使用前需要先安装,安装方法:

pip install openpyxl

注:一个excel文件可看做是一个工作簿,工作簿中的一个Sheet就是一个工作表。

详细使用方法

1、创建一个excel工作簿对象

进行读写、修改等操作前,需要创建一个可供操作的excel工作簿对象。

分以下2种情况和方法:

第一种:新建一个excel工作簿对象

情况1:写入数据,本地没有现成可直接写入的excel工作簿时。

使用Workbook类,新建一个excel工作簿对象,用来后续进行读写等处理。​​​​​​​​​​​​​​


from openpyxl import Workbook
# 新建一个excel工作簿对象
wb = Workbook()
# 保存新建的excel工作簿
wb.save('excel_test.xlsx')

注:(1)该类在新建excel工作簿的同时,也会新建了一个工作表(默认名为:Sheet)。

(2).save(保存路径)方法,对excel进行保存,写入或修改excel后,都需要保存。

(3)如果当前保存路径下,已经有一个同名excel文件,不会提示且原文件被覆盖。

上述代码,.save()保存,运行后,如下图:

图片

第二种:读取已有excel

情况2:读取本地已存在的excel,用来后续进行读写等处理。

方法:load_workbook(已有excel文件路径),如果路径中excel文件不存在,将会报错。​​​​​​​

from openpyxl import load_workbook
# 读取已存在的excel工作薄
wb = load_workbook('excel_test.xlsx')

​​​​​​​​​​​​​​2、创建excel工作簿中的工作表

openpyxl提供了可自定义工作表的方法。

工作表,即是常见说法的【Sheet】。

创建自定义名称的工作表,语法如下:

Workbook.create_sheet(title,index)
title:工作表的名称,可省略,系统自动命名(Sheet, Sheet1, Sheet2, ...)。
index:工作表的位置,可省略,默认插在工作表末尾,0表示插在第一个。​​​​​​
# 自定义工作表
ws1 = wb.create_sheet('test')
ws2 = wb.create_sheet()
# 保存
wb.save('excel_test.xlsx')

图片

3、查看excel工作簿中的所有工作表

查看excel工作簿中已存在的所有工作表,有以下3种方法。

第一种:.sheetnames​​​​​​​

# 查看所有工作表
sheet_lis = wb.sheetnames
print(sheet_lis)

图片

第二种:.get_sheet_names()​​​​​​​

# 查看所有工作表
sheet_lis1 = wb.get_sheet_names()
print(sheet_lis1)

图片

第三种:循环得到所有工作表​​​​​​​
​​​​​​​

# 查看所有工作表
for sheet in wb:print(sheet.title)

图片

4、获取工作表

进行读写、修改数据等操作时,首先需要获取工作簿中的工作表(即Sheet),作为操作对象。

3种获取工作表的方法,如下:

第一种:.active 方法

默认获取工作簿的第一张工作表​​​​​​

# 获取第一张工作表
ws = wb.active

图片

第二种:通过工作表名获取指定工作表​​​​​​

ws = wb['test']
print(ws)

图片

第三种:.get_sheet_name()

通过工作表名,使用方法:.get_sheet_name(工作表名)​​​​​​

ws3 = wb.get_sheet_by_name('Sheet1')
print(ws3)

图片

5、修改工作表的名称

使用.title属性,修改工作表名称。

修改工作表名称前,要先指定需要修改的工作表​​​​​​

# 获取要修改的工作表
ws1 = wb['text']
ws2 = wb['Sheet1']
# 修改工作表的名称
ws1.title = '测试'
ws2.title = '测试1'
# 保存
wb.save('excel_test.xlsx')

图片

6、数据操作

以下是openpyxl最常用的【读写】操作。

在进行【读写】操作时,首先需要创建一个excel工作簿对象,然后对该对象中的工作表(sheet)进行操作。

以下,将以读取本地已存在的excel_test.xlsx作为工作簿对象wb,进行举例。​​​​​​

from openpyxl import load_workbook
# 读取已存在的excel工作薄
wb = load_workbook('excel_test.xlsx')

注:在进行读写、修改等操作后,记得保存。

6.1、写入数据

(1)按单元格写入

直接赋值法​​​​​​

# 选择要写入的工作表
sheet1 = wb['测试']
# 写入单元格
cell = sheet1['A1']
cell.value = '测试数据'
# 保存
wb.save('excel_test.xlsx')

图片

上述可以简化为:​​​​​​

# 选择要写入的工作表
sheet1 = wb['测试']
sheet1['A2'] = '姓名'
# 保存
wb.save('excel_test.xlsx')

图片

通过指定坐标赋值方式,将数据写入单元格。

方法:.cell(row,column,value)

 row :行, column :列数,value:需要写入的数据。​​​​​​

# 选择要写入的工作表
sheet1 = wb['测试']
# 写入数据
sheet1.cell(row=3, column=4, value='一位代码')
# 保存
wb.save('excel_test.xlsx')

图片

(2)按行写入数据

.append(data)方法,传一个单层列表格式数据。​​​​​​

# 选择要写入的工作表
sheet1 = wb['测试1']
# 写入一行数据
data1 = [1, 2, 3, 4]
sheet1.append(data1)
# 保存
wb.save('excel_test.xlsx')

注:append()只能接受单层列表格式数据,多层列表需要循环写入

图片

6.2、读取数据

(1)获取工作表中已有全部数据

.values:获取目标工作表中已有全部数据,返回值是一个对象,需要进行转换。​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 获取所有值
print('返回值:', sheet1.values)
print('返回值转换后:', list(sheet1.values))

图片

以上方法,还可以用循环来写,如下:​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 循环获取
for row in sheet1.values:print(row)

图片

(2)获取指定范围内的值

获取指定单元格的值​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定单位格的值
cell1 = sheet1['A1']
print(cell1.value)

获取指定范围内单元格的值​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定坐标范围
cells = sheet1['A1':'B2'] # 还可以写成['A1:B2']
print('指定范围:', cells)
# 获取单元格的值
for row in cells:for cell in row:print(cell.value)

图片

获取指定列的值​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定列
cells = sheet1['A']# 多列['A:c']
print('指定列:', cells)
for cell in cells:print(cell.value)

图片

获取指定行的值​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定行
cells = sheet1[1]# 多行[1:5]
print('指定行:', cells)
for cell in cells:print(cell.value)

图片

注:这里的行下标从[1]开始,区别于列表或元组等

(3)按行、列获取工作表中已有全部数据

.rows,获取工作表中存在数据的所有行​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 获取所有的行
for row in sheet1.rows:print(row)

图片

.columns,获取工作表中存在数据的所有列​​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 获取所有的列
for column in sheet1.columns:print(column)

图片

​​​​​​​上述返回的值都是对象,需要根据for循环去取每个单元格的值。

如,获取所有列的值:​​​​​​

# 选择需要获取的工作表
sheet1 = wb['测试1']
# 获取所有的列的值
for column in sheet1.columns:for cell in column:print(cell.value)

图片

7、保存

.save() 方法:保存excel工作簿。

新建、写入或修改数据后都需要保存,处理操作才会生效。

这里需要再次注意一下,openpyxl只支持.xlsx后缀文件,如下:

wb.save('excel_test.xlsx') # excel_test.xlsx保存的路径、文件名

以上就是openpyxl最常使用的方法,可供参考。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ (4)

RabbitMQ (4) 文章目录 1. 死信的概念2. 死信的来源3. 死信代码案例3.1 TTL 过期时间3.2 超过队列最大长度3.3 拒绝消息 前言   上文我们已经学习完 交换机 ,知道了几个交换机的使用 ,下面我们来学习一下 死信队列 1. 死信的概念 先从概念解释上搞清楚这…

Wpf 使用 Prism 实战开发Day01

一.开发环境准备 1. VisualStudio 2022 2. .NET SDK 7.0 3. Prism 版本 8.1.97 以上环境,如有新的版本,可自行选择安装新的版本为主 二.创建Wpf项目 1.项目的名称:MyToDo 项目名称:这里只是记录学习,所以随便命名都无所谓,只要觉得合理就…

数据清洗与规范化详解

数据处理流程,也称数据处理管道,是将原始数据转化为有意义的信息和知识的一系列操作步骤。它包括数据采集、清洗、转换、分析和可视化等环节,旨在提供有用的见解和决策支持。在数据可视化中数据处理是可视化展示前非常重要的一步,…

CN考研真题知识点二轮归纳(1)

本轮开始更新真题中涉及过的知识点,总共不到20年的真题,大致会出5-10期,尽可能详细的讲解并罗列不重复的知识点~ 目录 1.三类IP地址网络号的取值范围 2.Socket的内容 3.邮件系统中向服务器获取邮件所用到的协议 4.RIP 5.DNS 6.CSMA/CD…

python随手小练8(南农作业题)

题目1: 输入3 门课程 a,b,c 的成绩,求 3 门成绩的总和平均值(整数,四舍五人)以及最高和最低值。如果3门课程考试成绩分别以权重 0.50.3 和0.2计人总评成绩(整数先求总和再四舍五入),则最终总评成绩是多少? 具体操作: a float(input("a:")) b float(in…

Element 多个Form表单 同时验证

一、背景 在一个页面中需要实现两个Form表单,并在页面提交时需要对两个Form表单进行校验,两个表单都校验成功时才能提交 所用技术栈:Vue2Element UI 二、实现效果 三、多个表单验证 注意项: 两个form表单,每个表单上…

2017年亚太杯APMCM数学建模大赛B题喷雾轨迹规划问题求解全过程文档及程序

2017年亚太杯APMCM数学建模大赛 B题 喷雾轨迹规划问题 原题再现 喷釉工艺用喷釉枪或喷釉机在压缩空气下将釉喷入雾中,使釉附着在泥体上。这是陶瓷生产过程中一个容易实现自动化的过程。由于不均匀的釉料在烧制过程中会产生裂纹,导致工件报废&#xff0…

https下载图片

OpenSSL用法示例 OpenSSL源码安装 对于ubuntu,懒得编译源码可以直接安装 sudo apt-get install libssl–dev /usr/include/openssl/ssl.h CMakeLists中添加 link_libraries(ssl crypto) apt-get安装不需要再制定libssl.a, libcrypto.a的路径了, 就像用libc标…

【算法|动态规划 | 01背包问题No.1】AcWing 426. 开心的金明

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…

node模块导出引入两种方式和npm包管理

模块化的好处 在 Node.js 中每个文件都被当做是一个独立的模块,模块内定义的变量和函数都是独立作用域的,因为 Node.js 在执行模块代码时,将使用如下所示的函数封装器对其进行封装 (function(exports,require,module,__filename,_dirname){//…

C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点

Chaikin算法——计算折线对应的平滑曲线坐标点 本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法,通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作,得到平滑的曲线坐…

CNN 网络结构简介

本文通过整理李宏毅老师的机器学习教程的内容,介绍 CNN(卷积神经网络)的网络结构。 CNN 网络结构, 李宏毅 CNN 主要应用在图像识别(image classification, 图像分类)领域。 通常,输入的图片大小相同&am…

【开源】基于SpringBoot的计算机机房作业管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课时管理模块2.4 学生作业模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程表3.2.2 课时表3.2.3 学生作业表 四、系统展示五、核心代码5.1 查询课程数据5.2 新增课时5.3 提交作…

Jupyter Notebook还有魔术命令?太好使了

在Jupyter Notebooks中,Magic commands(以下简称魔术命令)是一组便捷的功能,旨在解决数据分析中的一些常见问题,可以使用%lsmagic 命令查看所有可用的魔术命令 插播,更多文字总结指南实用工具科技前沿动态…

视频上的水印文字如何去掉?

嘿,大家好!作为一个自媒体从业者,我相信大家都想知道如何去掉视频上的水印文字,想必大家和我一样每天都会在互联网寻找素材,而大部分图片或者视频都带有各种各样的水印,这给我的创作带来了不小的麻烦&#…

Vue 3.3.6 ,得益于WeakMap,比之前更快了

追忆往昔,穿越前朝,CSS也是当年前端三剑客之一,风光的很,随着前端跳跃式的变革,CSS在现代前端开发中似乎有点默默无闻起来。 不得不说当看到UnoCss之前,我甚至都还没听过原子化CSS[1]这个概念(…

[开源]一个低代码引擎,支持在线实时构建低码平台,支持二次开发

一、开源项目简介 TinyEngine低代码引擎使能开发者定制低代码平台,支持在线实时构建低码平台,支持二次开发或集成低码平台能力。 二、开源协议 使用MIT开源协议 三、界面展示 四、功能概述 TinyEngine是一个低代码引擎,基于这个引擎可以构…

【Java每日一题】——第四十三题:USB接口程序设计。(2023.10.29)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料

方案总体介绍 整套方案硬件部分共2块板子,包括MCU主板,采用SH79F6441-32作为主处理器。MCU主板包括2个版本。PCM动力电池保护板采用SH367309。 软件方案采用Keil51建立的工程,带蓝牙的版本,支持5~16S电池。 硬件方案--MCU主板 MC…

【Matlab2016】Matlab中文版的下载、安装、激活(不建议安装过高版本!!)

这里写目录标题 首先双击R2016_win64.iso加载镜像文件双击setup.exe开始安装选择使用文件密钥安装填入密钥修改安装路径并记住此路径建议全部勾选等待安装完成 激活复制补丁到matlab路径下 创建快捷方式进入bin目录,找到matlab.exe 安装包 首先双击R2016_win64.iso加…