python使用openpyxl操作excel

news2024/11/15 17:56:01

文章目录

  • 前题
  • 读取已有excel
  • 创建一个excel工作簿对象
  • 创建excel工作簿中的工作表
  • 获取工作表
    • 第一种:.active 方法
    • 第二种:通过工作表名获取指定工作表​​​​​​
    • 第三种:.get_sheet_name()
  • 修改工作表的名称
  • 数据操作
    • 写入数据
      • 按单元格写入
      • 通过指定坐标赋值方式,将数据写入单元格。
      • 按行写入数据
    • 读取数据
      • 获取工作表中已有全部数据
      • 获取指定范围内的值
  • 一个示例

前题

使用前需要先安装下这个模块

pip install openpyxl

读取已有excel

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

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

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

创建一个excel工作簿对象

进行读写、修改等操作前,需要创建一个可供操作的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文件,不会提示且原文件被覆盖。

创建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')

获取工作表

进行读写、修改数据等操作时,首先需要获取工作簿中的工作表(即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)

修改工作表的名称

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

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

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

数据操作

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

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

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

from openpyxl import load_workbook
# 读取已存在的excel工作薄
wb = load_workbook('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')

按行写入数据

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

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

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

读取数据

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

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

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

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

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

获取指定范围内的值

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

# 选择需要获取的工作表
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)

一个示例

读取一个文件中一列数据,然后进行转置,保存为另外一个文件。
目的实际是为了来处理网络配置文件的。


from openpyxl import load_workbook

wb_obj = load_workbook('F:\\Desktop\\pyprj\\testorg.xlsx')
ws = wb_obj.active

# 转置
delta = 2       #转置开始位置偏移量
this_row = 1    #转置行下标
this_col = 1    #转置列下标
for row_num in range(1, ws.max_row + 1):
    this_col = this_col + 1                                 #列下标加1
    cell_value = ws.cell(row=row_num,column=1).value        #要转置的值
    if cell_value.strip() == "#":
        this_row = this_row + 1                             #行下标加1
        this_col = 0                                        #列下标重新开始
    ws.cell(row=this_row, column=this_col+delta).value = cell_value

wb_obj.save('99乘法表.xlsx')
wb_obj.close()

原始表
在这里插入图片描述
转置后
在这里插入图片描述

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

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

相关文章

在人工智能和机器学习的影响下,代理服务器正在不断演变

代理服务器是充当客户端(例如用户的智能手机)和目标服务器(例如网站或应用程序)之间的网关的中介。在互联网的早期,代理服务器主要用于缓存网络内容。然而,随着互联网的扩展,他们的角色也随之扩…

网络舆论传播分析:自然语言处理与图分析相融合

源自:《信息安全与通信保密》 作者:徐明 魏国富 殷钱安 优化识别能力和溯源能力 在网络信息技术快速发展的当下,做好网络舆论分析是确保网络舆论信息健康稳定传播的基本前提。 介 绍 图 1 自然语言处理与图分析相结合的模型思路 方 法…

Postman使用

Postman使用 Pre-request Script 参考: Scripting in Postman 可以请求、集合或文件夹中添加Pre-request Script,在请求运行之前执行JavaScript 如设置变量值、参数、Header和正文数据,也可以使用Pre-request Script来调试代码&#xff0…

JS调用栈:为何会栈溢出

JS调用栈:为何会栈溢出 JS调用栈什么是函数调用什么是栈在开发中利用调用栈栈溢出 JS调用栈 JavaScript 经常会出现一个函数中调用另外一个函数的情况,调用栈就是用来管理函数调用关系的一种数据结构,首先你要先弄明白函数调用和栈结构 什么…

gin框架使用系列之三——获取表单数据

系列目录 《gin框架使用系列之一——快速启动和url分组》《gin框架使用系列之二——uri占位符和占位符变量的获取》 一、获取get参数 get请求的参数是直接加在url后面的,在gin中获取get请求的参数主要用Query()和DefaultQuery()两个方法,示例代码如下…

c语言-打印某种图案练习题

目录 前言一、题目一二、题目二总结 前言 本篇文章叙述c语言中打印某种图案的练习题,以便加深对c语言的运用和理解。 一、题目一 题目分析: 行与行之间的关系:第一行不进行空格,从第二行开始空一个空格,后面的空格式逐…

启封涂料行业ERP需求分析和方案分享

涂料制造业是一个庞大而繁荣的行业 它广泛用于建筑、汽车、电子、基础设施和消费品。涂料行业生产不同的涂料,如装饰涂料、工业涂料、汽车涂料和防护涂料。除此之外,对涂料出口的需求不断增长,这增加了增长和扩张的机会。近年来,…

【转】26个开源免费又好用的SSH客户端工具

概要 工欲善其事、必先利其器,每天都需要通过SSH工具远程登录服务器,那么使用一款高效的连接工具就很有必要。 安全外壳协议(Secure Shell,简称SSH)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。…

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04)

解决阿里云远程连接yum无法安装问题(Ubuntu 22.04) 第一步 进入阿里云远程连接后,尝试安装宝塔面包第二步:尝试更新软件包等一些列操作第三步:完成上述操作之后,尝试安装yum第四步:尝试更换清华…

2024 年软件工程将如何发展

软件开发目前正在经历一场深刻的变革,其特点是先进自动化的悄然但显着的激增。这一即将发生的转变有望以前所未有的规模简化高质量应用程序的创建和部署。 它不是单一技术引领这一演变,而是创新的融合。从人工智能(AI) 和数字孪生技术,到植根…

“2023年的技术发展与个人成长:回顾与展望“

文章目录 每日一句正能量前言工作生活未来展望后记 每日一句正能量 凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。 前言 在这快速发展的信息时代,技术的进步和创新不…

设计模式-过滤器模式

设计模式专栏 模式介绍模式特点应用场景Java中的过滤器介绍代码示例Java实现过滤器模式Python实现过滤器模式 过滤器模式在spring中的应用 模式介绍 过滤器模式是一种设计模式,它允许开发人员使用不同的标准来过滤一组对象。这种模式是通过运算逻辑以解耦的方式将它…

MySQL常用命令合集(Mac版)

mysql信息 MySQL位置 which mysql查看版本 mysql --version启动与关闭 使用mysql.server启用脚本来执行,默认在/usr/local/mysql/support-files这个目录中。 启动 sudo /usr/local/mysql/support-files/mysql.server start关闭 sudo /usr/local/mysql/suppor…

JMeter逻辑控制器之ForEach控制器

1. 背景 前段时间在对某项目进行测试,存在一个需要遍历所有组织机构后给每个组织下新增部门的场景,其实也可以通过在数据库中直接添加数据这种方式来实现,但是有点风险,可能会生成脏数据,后期也不好排查,最…

音视频学习(二十二)——rtmp发流(tcp方式)

前言 本文主要介绍自研的RtmpStreamSender.dll,rtmp库提供接口接收裸流数据,支持将裸流数据封装为flv格式并通过rtmp协议发流。 关于rtmp协议基础介绍可查看:https://blog.csdn.net/www_dong/article/details/131026072 关于rtmp收流介绍可…

编程笔记 html5cssjs 004 我的第一个页面

编程笔记 html5&css&js 004 我的第一个页面 一、基本结构二、HTML标签三、HTML元素四、HTML属性五、编写第一个网页六、使用VSCODE小结 开始编写网页,并且使用第一个网页成为一个母板,用于完成后续内容的学习。有一个基本要求,显示结…

errors包返回堆栈信息的性能测试

errors包返回堆栈信息的性能测试 上一篇Golang中使用errors返回调用堆栈信息 讲了使用第三方开源库的errors github.com/go-errors/errors,错误信息带调用栈,方便定位错误的抛出位置。 通过堆栈的信息来定位是方便了,性能怎么样&#xff0c…

docker学习笔记02-安装mysql

1.安装mysql8 下载MySQL镜像 docker pull mysql:8.0创建并启动容器 docker run -itd --name mysqltest -p 9999:3306 -e MYSQL_ROOT_PASSWORD123456 mysql其中-it是交互界面 -d是后台执行 -name 指定容器名称 -p指定映射端口 -e设置环境变量 最后mysql是镜像名或者用镜像id如…

Switch语句与链接—计算机系统基础

实验内容:修改二进制可重定位目标文件“phase1.o”中相关节的内容(注意不允许修改.text节和重定位节的内容),使其与main.o模块如下链接后运行时输出目标字符串“123456789” gcc -no-pie -o linkbomb main.o phase1.o ./linkbomb…

Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动

为什么要使用MQ? 在Spring Boot Event这篇文章中已经通过Guava或者SpringBoot自身的Listener实现了事件驱动,已经做到了对业务的解耦。为什么还要用到MQ来进行业务解耦呢? 首先无论是通过Guava还是Spring Boot自身提供的监听注解来实现的事…