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

news/2024/7/21 6:37:02 标签: python, excel, 开发语言, Python进阶, openpyxl

openpyxl_1">7.2 Python操作Excel文件:openpyxl

openpyxl_2">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文件的读取和写入操作,适用于数据分析、数据清洗、报表生成等应用场景。

openpyxl_23">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.niftyadmin.cn/n/5308780.html

相关文章

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Java十种经典排序算法详解与应用

数组的排序 前言 排序概念 排序是将一组数据,依据指定的顺序进行排列的过程。 排序是算法中的一部分,也叫排序算法。算法处理数据,而数据的处理最好是要找到他们的规律,这个规律中有很大一部分就是要进行排序,所以需…

使用spring cloud gateway作为服务网关

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。 gateway需要注册到nacos中去,需要引入以下的依…

【单片机】延迟程序&延迟子程序的设计(入门)

前言 大家好吖,欢迎来到 YY 滴小小知识点系列 ,热烈欢迎! 本章主要内容面向接触过单片机知识点的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C1…

力扣hot100 对称二叉树 递归 队列

👨‍🏫 题目地址 👨‍🏫 参考思路 递归的难点在于:找到可以递归的点 为什么很多人觉得递归一看就会,一写就废。 或者说是自己写无法写出来,关键就是你对递归理解的深不深。 对于此题&#xf…

前端实现回车键触发搜索

前端实现回车键触发搜索 前言实现方法1. html里可以用 form 来实现2. 非form中的input 前言 搜索框是个常见的功能,除了用现有的ui组件库,有的时候必须要自己封装,所以涉及到点击按钮搜索和回车搜索都要实现 实现方法 1. html里可以用 for…

RH850P1X芯片学习笔记-A/D Converter (ADCF)

文章目录 Features of RH850/P1x-C ADCFNumber of UnitsRegister Base AddressClock SupplyInterrupts and DMAHardware ResetExternal Input/Output SignalsVirtual Channel OverviewFunctional OverviewBlock DiagramPhysical Channels, Virtual Channels and Scan Groups Re…

Vue中的组件通信方式及应用场景

在Vue中,组件通信有以下几种方式: Props / $emit:父组件通过给子组件传递props属性,子组件通过$emit事件将数据传递给父组件。适用于父组件向子组件传递数据。 自定义事件:父组件通过$on监听子组件触发的事件&#xf…