[Python进阶] Python操作Excel文件:openpyxl

7.2 Python操作Excel文件:openpyxl

7.2.1 openpyxl介绍

在Python中,有好几个可以用来操作excel文件的第三方库,比如:xlsxwriter、xlrd、xlwt、xlutils、pyexcel_xls等,但是这些第三方库对excel支持或多或少都有点小问题。

xlsxWriter:
1、支持新建和新建后的写入,不支持对已有的excel文件的读取和修改。
2、适合的场景:需要创建xlsx文件,不需要读,且数据量大;
xlrd & xlwt & xlutils:
1、对xls文件的读写和其他很多全面的功能,但是对xlsx的excel支持很差
2、适用的场景:要读取xls和xlsx文件中的值,最后生成xls文件,需要的功能不复杂。

在本章节中,将介绍openpyxl库来操作excel文件。Openpyxl是一个用于读取、写入Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它支持使用Python创建和修改Excel工作表、单元格、行和列等对象,并提供了许多操作Excel的方法。
以下是Openpyxl库的一些主要特点:
读取和写入Excel文件:Openpyxl可以读取和写入Excel 2010 xlsx/xlsm/xltx/xltm文件,支持使用Python读取和修改Excel文件中的数据。
创建和修改Excel工作表:使用Openpyxl可以创建新的Excel工作表,也可以修改现有的工作表。
操作单元格、行和列:Openpyxl提供了许多操作单元格、行和列的方法,例如获取单元格的值、设置单元格的格式、插入和删除行和列等。
支持公式:Openpyxl支持在Excel工作表中使用公式,可以使用Python创建和修改公式。
支持图表:Openpyxl支持在Excel工作表中创建和修改图表。
支持样式:Openpyxl支持设置单元格的样式,例如字体、颜色、对齐方式等。
支持数据验证:Openpyxl支持在Excel工作表中使用数据验证,可以限制用户在单元格中输入的数据类型和范围。
支持保护工作表:Openpyxl支持保护工作表,可以设置工作表的访问权限和密码。
总之,Openpyxl是一个功能强大的Python库,可以使用Python方便地进行Excel文件的读取和写入操作,适用于数据分析、数据清洗、报表生成等应用场景。

7.2.2 openpyxl库的安装

pip install openpyxl

7.2.3 创建工作簿和工作表

import openpyxl


def mtCreateNewWorkbook(pmWorkbookName="test.xlsx", pmSheetName="Sheet1"):
    """ 创建一个新的工作簿 """
    wb = openpyxl.Workbook()  # 生成一个 Workbook 的实例化对象,wb即代表一个工作簿(一个Excel文件)
    ws = wb.active  # 获取活跃的工作表,ws代表工作簿的一个工作表
ws.title = pmSheetName  # 更改工作表的名称

# 新建工作表,方式一:插入到最后(default)
ws1 = wb.create_sheet("Mysheet1") 
# 新建工作表,方式二:插入到最开始的位置
ws2 = wb.create_sheet("Mysheet2", 0)

# 选择表:
ws3 = wb["Mysheet1"]
ws4 = wb.get_sheet_by_name("Mysheet2")

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

# 删除表
wb.remove(sheet1)
del wb[‘sheet2’]

    wb.save(pmWorkbookName)  # 保存工作簿

mtCreateNewWorkbook()

7.2.4 打开已存在的工作簿

使用openpyxl库下的load_workbook函数可以用来打开已存在的工作簿。该函数的参数说明如下:
openpyxl.load_workbook(
filename, 要打开的excel文件名,不支持xls
read_only=False, 是否只读打开,默认可读写打开
keep_vba=KEEP_VBA, 是否要保留excel文件中的vba代码,建议保留
data_only=False, 是否删除公式只保留公式计算后的值
keep_links=True 是否应保留指向外部工作簿的链接。默认保留
)

7.2.5 读取工作表中的内容

在openpyxl库中,对于读取工作表中的内容有几种模式:
1、单元格模式
2、单行模式
3、单列模式
4、行模式
5、列模式
6、切片模式
根据自身需要选择不同的模式进行读取。

import openpyxl
from icecream import ic

wb = openpyxl.load_workbook('test.xlsx', read_only=True, data_only=True)
ws = wb.active
ic(ws['A2'].value)  # 单元格:A2
ic(ws.cell(2, 2).value)  # 单元格:(2,2)
ic([x.value for x in ws[2]])  # 单行模式:(2)
ic([[cell.value for cell in row] for row in ws[2:4]])  # 行模式:(2:4)
ic([[cell.value for cell in row] for row in ws['A2:C4']])  # 切片:A2:C4
wb.close()
wb = openpyxl.load_workbook('test.xlsx', read_only=False, data_only=True)
ws = wb.active
ic([x.value for x in ws['C']])  # 单列模式:(2),必须是开启可写模式才可以。
ic([[cell.value for cell in row] for row in ws['A:C']])  # 列模式:A:C,必须是开启可写模式才可以。
wb.close()

17:10:58|> ws[‘A2’].value: 2
17:10:58|> ws.cell(2, 2).value: 4
17:10:58|> [x.value for x in ws[2]]: [2, 4, 6, 8, 10]
17:10:58|> [[cell.value for cell in row] for row in ws[2:4]]: [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
17:10:58|> [[cell.value for cell in row] for row in ws[‘A2:C4’]]: [[2, 4, 6], [3, 6, 9], [4, 8, 12]]
17:10:58|> [x.value for x in ws[‘C’]]: [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
17:10:58|> [[cell.value for cell in row] for row in ws[‘A:C’]]: [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20],
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]]

7.2.6 修改工作表中的数据

import openpyxl

wb = openpyxl.load_workbook('test.xlsx', read_only=False, data_only=True)
ws = wb.active
for i in range(1, 5):
    for j in range(1, 5):
        ws.cell(i, j).value = i ** j
wb.save('test.xlsx')
wb.close()

7.2.7 其它

from icecream import ic
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string

wb = openpyxl.load_workbook('test.xlsx', read_only=False, data_only=True)
ws = wb.active
ic(ws.max_row, ws.max_column)  # 获取已使用单元格的最大行和列
ic([x for x in ws.rows])  # 获取所有行
ic([x for x in ws.columns])  # 获取所有列,必须read_only=False

# 根据列的数字返回字母
ic(get_column_letter(2))  # B
# 根据字母返回列的数字
ic(column_index_from_string('D'))  # 4

wb.close()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

钡铼网关 只需一台,解锁智慧无人搅拌站系统,绿色又环保

行业需求 为了提高搅拌站的自动化,减少人工繁琐的操作,同时记录物料的增减记录,实现对于物料从进场到出场的全周期管理。 系统介绍 针对搅拌站各个环节的需求大致相同,市场中逐渐流行一整套基本的智慧搅拌站解决方案。各种搅拌站…

水母目标检测数据集VOC格式500张

水母,一种美丽而神秘的海洋生物,以其独特的形态和生态习性而备受瞩目。 水母的体型呈伞状,身体透明,有各种颜色和花纹。它们没有骨骼,身体由胶状物质组成,非常柔软和脆弱。水母通过触手上的刺细胞释放毒素…

哪个洗地机质量好?2024年洗地机推荐

如今,家用洗地机已经成为越来越多家庭的不可或缺之物。然而,在市场上琳琅满目的洗地机品牌和型号中,究竟哪一个性价比高、质量好,很多消费者常常陷入选择困难。为了帮助大家能够更加轻松地购买到适合自己的洗地机,我们…

dotdotdot插件快速实现多行文本的省略

jQuery.dotdotdot 前言 在“css新增文本样式(完整)”这篇,我们介绍了text-overflow属性省略多余的文本。用text-overflow属性可以直接省略单行文本,但省略多行文本,单独使用CSS是无法实现,今天我们介绍一…

【Linux 内核源码分析】关于Linux内核源码目录结构

Linux内核源码采用树形结构。功能相关的文件放到不同的子目录下面,使程序更具有可读行。 使用Source Insight打开源码,如下图所示,可以看到源码是树形结构。 目录含义描述arch存放与体系结构相关的代码,包括不同硬件平台的特定代…

深度解析分布式算法:构建高效稳定的分布式系统

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

高校选课系统需求分析开发源码

高校学生选课报名系统包括学生、教师和管理员三方的功能需求,学生的需求是查询院系的课程、选课情况及个人信息修改;教师则需要查看和查询所有课程信息及自己的课程信息以及教师信息的修改;管理员则负责更为复杂的任务,包括对学生…

2023年阿里云云栖大会:前沿技术发布与未来展望

在2023年的阿里云云栖大会上,我见证了云计算和人工智能领域的又一历史性时刻。这次大会不仅是对未来科技趋势的一次深入探索,更是阿里云技术实力和创新能力的集中展示。 首先,千亿级参数规模的大模型通义千问2.0的发布,无疑将人工…

【大厂秘籍】系列 - Java多线程面试题

Java多线程面试题 友情提示,看完此文,在Java多线程这块,基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 线程是进程的子集,一个进程可以有很多线程,每条线…

【MongoDB】MongoDB查询语句find的使用,和提高查询速度的游标的使用,非常详细!!!

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:MongoDB数据库 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前…

MySQL基础篇(三)约束

一、概述 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确、有效性和完整性。 分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。 二…

Java BIO、NIO、AIO、Netty知识详解(值得珍藏)

1. 什么是IO Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领…

【每日一题】在链表中插入最大公约数

文章目录 Tag题目来源解题思路方法一:迭代 写在最后 Tag 【迭代】【辗转相除法】【链表】【2024-01-06】 题目来源 2807. 在链表中插入最大公约数 解题思路 方法一:迭代 思路 首先需要求两个数的最大公约数,使用辗转相除法。实现代码如下…

PyQT 多进程

在PyQt中,图形化界面(GUI)是运行在主线程中的,而多进程是在独立的进程中执行的。默认情况下,多进程之间是无法直接共享图形化界面的。 然而,有几种方法可以在多进程中与PyQt的图形化界面进行通信&#xff…

【大数据】Zookeeper 客户端的命令行操作

Zookeeper 客户端的命令行操作 1.显示某个路径下的所有节点:ls2.显示某个路径下的所有节点,以及当前节点的详细信息:ls23.创建节点:create4.创建临时节点:create -e5.创建顺序(带编号)节点&…

程序员副业之无人直播助眠

介绍和概览 大家好,我是小黑,本文给大家介绍一个比较轻松简单的副业,无人直播助眠副业。 这个项目的核心就是通过直播一些助眠素材来赚钱。比如你可以放一些舒缓的雨声之类的,吸引观众进来。然后,咱们可以挂个小程序…

DS|哈希查找

题目一:DS哈希查找 -- 线性探测再散列 题目描述: 定义哈希函数为H(key) key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。 输入要求&#xf…

【C语言】Linux实现高并发处理的过程

一、实现高并发的几种策略 C语言本身并没有内建的多线程支持(新版C语言支持,但用得不多),但是在多数操作系统中,可以使用库来实现多线程编程。例如,在POSIX兼容系统上,可以使用 pthreads 库来创…

如何建立标准且有效的评审流程?6个重点

为了进一步提高项目质量,项目评审管理需要遵循一定的标准化流程。而建立标准且有效的评审流程,能够快速提高项目质量和效率,优化团队协作,降低风险,提高项目成功率。如果组织没有建立起标准化的评审流程,就…

JAVAEE初阶相关内容第二十弹--HTTP协议【续集】

写在前:在前一篇博客中我们初步掌握了HTTP(超文本传输协议)的相关知识【点击跳转】,认识了HYYP协议的工作过程,掌握抓包工具Fiddler的使用。在“方法”中重点需要理解“GET”方法与“POST”方法的格式与内容,并了解了请求“报头”…