python 使用 openpyxl 处理 Excel 教程

目录

  • 前言
  • 一、安装openpyxl库
  • 二、新建excel及写入单元格
    • 1.创建一个xlsx格式的excel文件并保存
    • 2.保存成流(stream)
    • 3.写入单元格
  • 三、创建sheet工作表及操作
  • 四、读取excel和单元格
    • 1.读取 excel 文件
    • 2.读取单元格
    • 3.获取某一行某一列的数据
    • 4.遍历所有单元格
    • 5.遍历指定行列范围的单元格
  • 五、合并、拆分单元格和插入删除行列
    • 1.合并单元格
    • 2.拆分合并的单元格
    • 3.插入行和列
      • (1)插入单行单列
      • (2)插入多行多列
    • 4.删除行和列
      • (1)删除单行单列
      • (2)删除多行多列
  • 六、单元格对齐
    • 1. 对齐方式与换行
    • 2.单元格对齐
    • 3.合并后的单元格设置对齐方式
  • 七、单元格边框设置
    • 1. 边框线条粗细、颜色设置
    • 2.设置单个单元格边框和颜色
    • 3.设置多个单元格整体边框和颜色
  • 八、设置单元格背景颜色和文字字体
    • 1.设置单元格背景颜色
    • 2.设置字体、字体的粗细、大小、颜色
  • 九、设置行高和列宽

前言

python 操作excel 的库有很多 ,有的库只能读取 xsl 格式,比如 xlrd 库;
有的库只能写 xsl 格式,比如 xlwt 库;
有的只能读写 xslx 格式,比如 openpyxl 库 。

综合各库及 xslx 格式比较常见,所以本文主要讲解 openpyxl 库对 xslx 格式的 excel 操作。

一、安装openpyxl库

pip install openpyxl

二、新建excel及写入单元格

1.创建一个xlsx格式的excel文件并保存

from openpyxl import Workbook

# 创建一个工作表
wb = Workbook()
# 保存为本地excel文件
wb.save("F:\pythonTest\sample.xlsx")

2.保存成流(stream)

例如当使用 Pyramid, Flask 或 Django 等 web 应用程序时,如果想把文件保存成流,可以使用 NamedTemporaryFile( )方法

from tempfile import NamedTemporaryFile
from openpyxl import Workbook

wb = Workbook()
with NamedTemporaryFile() as tmp:
     wb.save(tmp.name)
     tmp.seek(0)
     stream = tmp.read()

3.写入单元格

from openpyxl import Workbook

wb = Workbook()
# 创建第一个sheet
sheet = wb.active

# 方式一 在第1行第1列的单元格写入111
sheet['A1'] = 111
# 方式二 在第1行第1列的单元格写入111
# sheet.cell(row=1, column=1, value=111)
# 方式三 先获取到单元格,再将数据写入value属性
# cell = sheet['A1']
# cell.value = 111

wb.save("F:\pythonTest\sample.xlsx")

下面的简单示例将新建一个 xlsx 文件并在里面新建 3 个 sheet 工作表,每个 sheet 工作表都写上一点数据:

from openpyxl import Workbook

# 初始化
wb = Workbook()

# 创建第一个sheet
sheet = wb.active
# 在第1行第1列的单元格写入111
sheet['A1'] = 111

# 创建一个新的sheet
sheet1 = wb.create_sheet()
# 在这个新的sheet中第2行第2列的单元格写入222
sheet1['B2'] = 222

# 创建一个叫"第3个工作表"的新sheet
sheet3 = wb.create_sheet("第3个工作表")
# 在这个新的sheet中第3行第3列的单元格写入333
sheet3['C3'] = 333

# 保存本地excel文件中
wb.save("F:\pythonTest\sample.xlsx")

请添加图片描述

三、创建sheet工作表及操作

1.创建新的工作表

一个工作表至少有一个工作表,你可以通过 Workbook.active 来创建第一个sheet

sheet = wb.active

创建新的带有名字的工作表

# 在结尾插入一个叫 "我的sheet1" 的sheet
sheet1 = wb.create_sheet("我的sheet1") 
# 或者在最开始插入一个叫 "我的sheet12" 的sheet
sheet2 = wb.create_sheet("我的sheet12", 0)
# 或者在倒数第二的位置插入一个叫 "我的sheet13" 的sheet
sheet3 = wb.create_sheet("我的sheet13", -1) 

2.删除指定工作表

# 删除名字是 "我的sheet13" 的工作表
wb.remove(wb['3号sheet'])

3.修改sheet工作表的名称

# 在结尾插入一个叫 "我的sheet1" 的工作表
sheet1 = wb.create_sheet("我的sheet1") 
# 将"我的sheet1" 的工作表名字改为"first"
sheet1.title = "first"

4.获取所有工作表的名称

print(wb.sheetnames) #['Sheet', '我的sheet1', 'first', 'second']

5.切换工作表

current = wb["first"]
# 切换到 "second" 工作表
current = wb["second"]

6.遍历所有sheet工作表

for s in wb:
     print(s.title)

7.复制sheet工作表

sheet = wb.active
sheetNew = wb.copy_worksheet(sheet)

四、读取excel和单元格

1.读取 excel 文件

读取 excel 文件并打印所有的 sheet 工作表名称

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
print(wb.sheetnames) # ['Sheet', 'Sheet1', 'New Title']

2.读取单元格

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取"New Title" 这个sheet工作表
sheet = wb["第3个工作表"]

# 方式一 获取 "C3"这个单元格
cell = sheet["C3"]
# 方式二 获取 第3行3列 这个单元格
# cell = sheet.cell(row=3, column=3)

# 打印单元格的值
print(cell.value)

3.获取某一行某一列的数据

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample1.xlsx")
sheet = wb["Sheet"]

# 获取第2行的单元格数据并打印
row = sheet['2']
row_data = []
for cell in row:
    row_data.append(cell.value)
print(row_data)

# 获取第3列的单元格数据并打印
col = sheet['C']
col_data = []
for cell in col:
    col_data.append(cell.value)
print(col_data)


4.遍历所有单元格

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 遍历所有的sheet工作表
for sheet in wb:
    # 获取当前sheet工作表的行数据
    rows = tuple(sheet.rows)
    # 遍历每一行
    for row in rows:
        # 遍历每一个单元格
        for cell in row:
            print(cell.value)

上面使用了sheet.rows 获取行数据,如果要获取列数据可以使用 sheet.columns

5.遍历指定行列范围的单元格

方式一:使用切片方式

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取叫"Sheet"的工作表
sheet = wb["Sheet"]
# 获取叫'A2'到'C4'范围的所有单元格
rows = sheet['A2':'C4']
for cells in rows:
    for cell in cells:
        print(cell.value, end=" ")
    print()

方式二:使用iter_rows方法

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取叫"Sheet"的工作表
sheet = wb["Sheet"]
# 获取 2到4行,1到3列 范围的所有单元格
for row in sheet.iter_rows(min_row=2, min_col=1, max_col=3, max_row=4):
    for cell in row:
        print(cell.value, end=" ")
    print()

五、合并、拆分单元格和插入删除行列

1.合并单元格

合并单元格时,除了左上角的单元格内容,其他都选中范围单元格将从工作表中删除

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取叫"Sheet"的工作表
sheet = wb["Sheet"]

# 方式一 合并 A2到C4 范围的单元格
sheet.merge_cells('A2:C4')
# 方式二 合并 2到4行,1到3列 范围的所有单元格
# sheet.merge_cells(start_row=2, start_column=1, end_row=4, end_column=3)

wb.save("F:\pythonTest\sample.xlsx")

在这里插入图片描述

2.拆分合并的单元格

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取叫"Sheet"的工作表
sheet = wb["Sheet"]

# 方式一 拆分 A2到C4 范围的单元格
sheet.unmerge_cells('A2:C4')
# 方式二 拆分 2到4行,1到3列 范围的所有单元格
ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)

wb.save("F:\pythonTest\sample.xlsx")

3.插入行和列

(1)插入单行单列

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
sheet = wb["Sheet"]
# 在第3行前插入一行
sheet.insert_rows(3)
# 在第2列前插入一列
sheet.insert_cols(2)
wb.save("F:\pythonTest\sample.xlsx")

(2)插入多行多列

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
sheet = wb["Sheet"]
# 在第3行前插入四行
sheet.insert_rows(3, 4)
# 在第2列前插入五列
sheet.insert_cols(2, 5)
wb.save("F:\pythonTest\sample.xlsx")

4.删除行和列

(1)删除单行单列

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
sheet = wb["Sheet"]
# 删除第3行
sheet.delete_rows(3)
# 删除第2列
sheet.delete_cols(2)
wb.save("F:\pythonTest\sample.xlsx")

(2)删除多行多列

from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
sheet = wb["Sheet"]
# 从第3行前开始删除四行
sheet.delete_rows(3, 4)
# 从第2列开始删除五列
sheet.delete_cols(2, 5)
wb.save("F:\pythonTest\sample.xlsx")

六、单元格对齐

1. 对齐方式与换行

# horizontal是水平方向,vertical 是垂直方向
Alignment(horizontal="center", vertical="center")
# 默认单元格填满了是不换行的,如果要自动换行可使用 wrap_text=True
Alignment(horizontal="center", vertical="center", wrap_text=True)

horizontal 水平对齐可选值如下

参数值对齐方式
left左对齐
center左右居中
right右对齐
fill填满对齐
distributed分散对齐
centerContinously连续居中
justify两端对齐
general一般对齐

vertical 垂直对齐可选值如下

参数值对齐方式
top上对齐
center左右居中
bottom下对齐
distributed分散对齐
justify两端对齐

2.单元格对齐

from openpyxl import Workbook
from openpyxl.styles import Alignment

wb = Workbook()
sheet = wb.active

# 在第1行第1列的那个单元格写入123546
cell = sheet['A1']
cell.value = 123546
# 将该单元格对齐方式设置为水平和垂直都居中
cell.alignment = Alignment(horizontal="center", vertical="center")

wb.save("F:\pythonTest\sample.xlsx")

3.合并后的单元格设置对齐方式

可以改变左上单元格的对齐方式、边框等属性来改变整个合并单元格的对齐方式、边框等属性。

from openpyxl.styles import Alignment
from openpyxl import load_workbook

wb = load_workbook("F:\pythonTest\sample.xlsx")
# 获取叫"Sheet"的工作表
sheet = wb["Sheet"]

#  合并 A2到C4 范围的单元格
sheet.merge_cells('A2:C4')
# 改变左上单元格的对齐方式来改变合并单元格的对齐方式
cell = sheet['A2']
cell.alignment = Alignment(horizontal="center", vertical="center")

wb.save("F:\pythonTest\sample.xlsx")

七、单元格边框设置

1. 边框线条粗细、颜色设置

(1)你可以对单元格上下左右的边框进行设置虚线和实线

Border(
    left=Side(style='thick'),
    bottom=Side(style='mediumDashed'),
    right=Side(style='thin'),
    top=Side(style='dashed'))

其中thin是细实线,thick是粗实线,dashed是细虚线,mediumDashed是粗虚线.
全部边框线条可选的有如下:

'dashDot','dashDotDot', 'dashed','dotted',
'double','hair', 'medium', 'mediumDashDot', 
'mediumDashDotDot','mediumDashed', 'slantDashDot',
'thick', 'thin'

(2)你还可以使用 color 参数调整单元格上下左右边框的颜色

Border(
    left=Side(style='thick', color='00000000'),
    bottom=Side(style='mediumDashed', color='00000000'),
    right=Side(style='thin', color='00000000'),
    top=Side(style='dashed', color='00000000'))

可取的颜色参考如下:

请添加图片描述

2.设置单个单元格边框和颜色

from openpyxl import Workbook
from openpyxl.styles import Border, Side

wb = Workbook()
sheet = wb.active

# 在第1行第1列的那个单元格写入123546
cell = sheet['B2']
cell.value = 123546
# 设置该单元格边框和颜色
cell.border = Border(
    left=Side(style='thick', color='00000000'),
    bottom=Side(style='mediumDashed', color='00000000'),
    right=Side(style='thin', color='00000000'),
    top=Side(style='dashed', color='00000000'))

wb.save("F:\pythonTest\sample1.xlsx")

3.设置多个单元格整体边框和颜色

想要整体添加边框,有两种方式:

(1) 先合并单元格再对左上角的单元格进行操作,但往往这些单元格都有不同的数据,难以进行合并。
(2) 遍历所有的单元格,分别赋予属性。这种方法比较适用于为所有的单元格赋予相同的属性。

八、设置单元格背景颜色和文字字体

1.设置单元格背景颜色

from openpyxl import Workbook
from openpyxl.styles import PatternFill

wb = Workbook()
sheet = wb.active

# 在第1行第1列的那个单元格写入123546
cell = sheet['B2']
cell.value = 123546
# 使用fgColor属性16进制颜色填充
cell.fill = PatternFill('solid', fgColor="FF00FF")

wb.save("F:\pythonTest\sample1.xlsx")

2.设置字体、字体的粗细、大小、颜色

from openpyxl import Workbook
from openpyxl.styles import Font

wb = Workbook()
sheet = wb.active

# 在第1行第1列的那个单元格写入123546
cell = sheet['B2']
cell.value = 123546
# 设置字体样式:  字体大小为30, bold加粗,字体颜色 00FFFF 16进制颜色
cell.font = Font(u'微软雅黑', size=30, bold=True, color="00FFFF")

wb.save("F:\pythonTest\sample1.xlsx")

九、设置行高和列宽

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active

# 设置第1行高度为60
sheet.row_dimensions[1].height = 60
# 设置B列宽度为30
sheet.column_dimensions["B"].width = 30

wb.save("F:\pythonTest\sample1.xlsx")

参考:
Tutorial

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

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

相关文章

数据结构之堆——算法与数据结构入门笔记(六)

本文是算法与数据结构的学习笔记第六篇,将持续更新,欢迎小伙伴们阅读学习。有不懂的或错误的地方,欢迎交流 引言 当涉及到高效的数据存储和检索时,堆(Heap)是一种常用的数据结构。上一篇文章中介绍了树和完…

iOS自动化环境搭建(超详细)

1.macOS相关库安装 libimobiledevice > brew install libimobiledevice 使用本机与苹果iOS设备的服务进行通信的库。 ideviceinstaller brew install ideviceinstaller 获取设备udid、安装app、卸载app、获取bundleid carthage > brew install carthage 第三方库…

机器视觉初步5:图像预处理相关技术与原理简介

在机器视觉领域中,图像预处理是一项非常重要的技术。它是指在对图像进行进一步处理之前,对原始图像进行一系列的操作,以提高图像质量、减少噪声、增强图像特征等目的。本文将介绍一些常用的图像预处理技术,并通过配图说明&#xf…

Android CMake

首先了解几个名词 NDK The Android Native Development Kit The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. For certain types of apps, this can help you reuse code libraries written in t…

Centos7安装Python3.10

Centos7用yum安装的Python3版本比较旧,想要安装最新版本的Python3需要自己动手编译安装。下面就来讲讲安装步骤,主要分为这么几个步骤,依赖→下载→编译→配置。另外所有操作都是在root用户下进行。 依赖 编译Python源码需要依赖许多库&…

springboot-内置Tomcat

一、springboot的特性之一 基于springboot的特性 自动装配Configuretion 注解 二、springboot内置Tomcat步骤 直接看SpringApplication方法的代码块 总纲: 1、在SpringApplication.run 初始化了一个上下文ConfigurableApplicationContext configurableApplica…

《C++ Primer》--学习4

函数 函数基础 局部静态对象 局部静态对象 在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁,在此期间即使对象所在函数结束执行也不会对它有影响 指针或引用形参与 const main: 处理命令行选项 列表初始化返回…

机器人参数化建模与仿真,软体机器人

专题一:机器人参数化建模与仿真分析、优化设计专题课程大纲 机器人建模基础 机器人运动学基础几何运动学闭环解解析法建模运动学MATLAB脚本文件编写(封闭解、构型绘制)、工具箱机器人工作空间(离散法、几何法)建模工作…

Debian12中Grub2识别Windows

背景介绍:windows10 debian11,2023年6月,Debian 12正式版发布了。抵不住Debian12新特性的诱惑,我将Debian11升级至Debian12。升级成功,但Debian12的Grub2无法识别Window10。于是执行如下命令: debian:~# update-grub G…

MySQL如何在Centos7环境安装:简易指南

目录 前言 一、卸载不要的环境 1.检查本地MySQL是否正在运行 2.停止正在运行的MySQL 二、检查系统安装包 三、卸载这些默认安装包 1.手动一个一个卸载 2.自动卸载全部 四、获取mysql官方yum源 五、安装mysql yum源,对比前后yum源 1.安装前 2.安装中 3.…

认识服务器

1、查看操作系统的信息 CentOS 输入:cat /etc/os-release 字段含义解释NAME操作系统名称CentOS LinuxVERSION操作系统版本7 (Core)ID操作系统标识centosID_LIKE相关操作系统标识rhel fedoraVERSION_ID操作系统版本号7PRETTY_NAME可读性较好的操作系统名称CentOS L…

0004Java程序设计-SSM+JSP医院挂号系统

摘 要 医院挂号,一直以来就是困扰医院提高服务水平的重要环节,特别是医疗水平高、门诊访问量高的综合型医院,门诊拥挤就成了普遍现象。因此,本文提出了医院挂号系统。预约挂号,是借助信息化的技术,面向全社…

PB9如何实现datawindow打印导出PDF,PB导出PDF

PB9如何实现datawindow打印导出PDF,PB导出PDF? 之前的saveas导出pdf,设置非常麻烦。需要 1. 安装gs705w32.exe 2. 设置系统path: C:\gs\gs7.05\bin (以实际安装目录为准) 3. 安装虚拟打印机 PowerBuilder9.0自带的: Sybase\Shared\Power…

【雕爷学编程】Arduino动手做(120)---游戏摇杆扩展板

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

变化太快的Roop项目(版本1.0.1)

文章目录 (一)版本1.0.1的变化(1.1)项目依赖(1.2)模型位置(1.3)命令行(1.4)界面UI(1.5)处理与结果 最早的🔗接触和介绍&am…

2023亚马逊云科技中国峰会引领无服务器架构新潮流:Serverlesspresso Workshop

序言 在今年3月,我有幸接触了一个项目,也因此结识了 亚马逊云科技无服务器架构 Serverless。在陆续了解 Amazon 产品的过程中,我逐渐发现它所带给我的惊喜远远超出了最初的预期。 今天,想向大家介绍一个名为 Serverlesspresso Wor…

树莓派+Docker+cpolar(内网穿透)+Nignx

首先安装Raspberry Pi Imager,用于给SD卡安装系统镜像。 使用Raspberry Pi Imager(树莓派镜像烧录器)烧录镜像文件到SD中,操作步骤如下图所示: docker安装nginx提供web服务 获取最新版本的docker安装包: su…

Kafka系列之:一次性传送和事务消息传递

Kafka系列之:一次性传送和事务消息传递 一、目标二、关于事务和流的一些知识三、公共接口四、示例应用程序五、新配置六、计划变更1.幂等生产者保证2.事务保证 七、关键概念八、数据流九、授权十、RPC 协议总结1.获取请求/响应2.生产请求/响应3.ListOffset请求/响应…

web前端框架JS学习之JavaScript类型转换

vascript有多种数据类型,如字符串、数字、布尔等,可以通过typeof语句来查看变量的数据类型。数据类型转换就是数据类型之间相互转换,比如把数字转成字符串、把布尔值转成字符串、把字符串转成数字等,这在工作也是经常碰到的。 本…

Excel VBA 编程入门

Visual Basic for Applications(VBA)是一种用于 Microsoft Office 套件中的编程语言,它可以帮助您自动化重复性任务、定制应用程序以及增强工作效率。本文将向您介绍 Excel VBA 编程的基础知识,并通过示例帮助您入门。 1、启用“开…
最新文章