Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

xlwings模块详解
- 1、快速入门
- 1、打开Excel
- 2、创建工作簿
- 2.1、使用工作簿
- 2.2、操作工作簿
- 3、创建工作表
- 3.1、使用工作表
- 3.2、操作工作表
- 3.3、删除工作表
- 4、读写单元格
- 4.1、选择单元格
- 4.2、写入数据到单元格
- 4.3、读取单元格的数据
- 4.4、设置单元格样式
- 4.4、删除单元格
xlwings 是用来「处理Excel」的Python第三方库,开源免费,一直在更新。
使用前需要「下载」、安装 xlwings 模块
【File】-【Settings】-【Progect:xxx】-【Python Interpreter】

然后「导入模块」,as是别名,方便后续调用
import xlwings as xw
在 xlwings 中
- App:表示Excel程序
- Book:表示工作簿
- Sheet:表示工作表
- Range:表示单元格
1、快速入门
import xlwings as xw# 1、打开Excel程序,处理过程可观
with xw.App(visible=True) as app:# 2、选择使用的工作簿book = app.books[0]# 3、选择使用的工作表sheet = book.sheets[0]# 4、选择单元格范围,设置背景颜色sheet.range('A1').color = '#ff0000'# 向单元格写入数据sheet.range('A2').value = 'hello Excel'# 5、保存工作簿book.save('myExcel.xlsx')
预期:文件保存到当前目录,打开后看到我们写入的内容。
1、打开Excel
使用 App() 打开Excel程序,一个App对应一个Excel实例。
为了防止僵尸进程,建议这样「启动」Excel( with 搭建上下文,会「自动释放」资源,无需手动close)
import xlwings as xwwith xw.App(visible=True) as app:print(app)
输出:
<App [excel] 5276>
提示:
- 桌面下方的任务栏会有Excel的程序一闪而过,这是因为 with 会自动关闭Excel;
- 如果
visible=False,则任务栏看不到变化(程序不可见); - 如果直接用
xw.App()的方式打开Excel,则会在桌面打开Excel,并且不会关闭。 app.activate():活动Excel,将Excel程序放到桌面最前方。focus=True表示将鼠标焦点移动到Excel。
实例
import xlwings as xwwith xw.App(visible=True) as app:app.activate(True)
预期:Excel显示在桌面最前方(一闪而过)。
2、创建工作簿
在Excel中,「新建」一个工作簿,并返回工作簿对象Book,有三种创建方式:
xw.Book()xw.books.add()app.books.add()
实例
import xlwings as xwwith xw.App(visible=True) as app:print('自带一个工作簿:', app.books[0])book2 = xw.Book()print(book2)book3 = xw.books.add()print(book3)book4 = app.books.add()print(book4)print(app.books)
输出:
自带一个工作簿: <Book [工作簿1]>
<Book [工作簿2]>
<Book [工作簿3]>
<Book [工作簿4]>
Books([<Book [工作簿1]>, <Book [工作簿2]>, <Book [工作簿3]>, ...])
2.1、使用工作簿
1)「使用」指定的工作簿,根据工作簿的名字/索引/序号,并返回工作簿对象,有五种方式。
注意:() 根据 序号 选择,从1开始;[]根据 索引 选择,从0开始。
- app.books (
序号) - app.books [
索引] - xw.books [
索引] - xw.books (
序号) - xw.Book (
名字)
实例
import xlwings as xwwith xw.App(visible=True) as app:print(app.books)print(app.books(1))print(app.books[0])print(xw.books[0])print(xw.books(1))print(xw.Book('工作簿1'))
输出:
Books([<Book [工作簿1]>])
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
2)使用指定的工作簿,根据「文件路径」(用r字符串包裹路径),有三种方式
- xw.Book(
路径) - xw.books.open(
路径) - app.books.open(
路径)
实例
import xlwings as xwwith xw.App(visible=True) as app:print(xw.Book(r'E:\test.xlsx'))print(xw.books.open(r'E:\test.xlsx'))print(app.books.open(r'E:\test.xlsx'))print(app.books)
输出:
<Book [test.xlsx]>
<Book [test.xlsx]>
<Book [test.xlsx]>
Books([<Book [工作簿1]>, <Book [test.xlsx]>])
2.2、操作工作簿
book.name:返回工作簿的名字book.sheets:返回工作簿的所有sheet页(列表)book.app:返回工作簿所在的App对象(Excel程序)
实例
import xlwings as xwwith xw.App(visible=True) as app:book = app.books[0]print(book.name)print(book.sheets)print(book.app, app)print(book.selection)
输出:
工作簿1
Sheets([<Sheet [工作簿1]Sheet1>])
<App [excel] 18392> <App [excel] 18392>
<Range [工作簿1]Sheet1!$A$1>
book.save():保存工作簿,如果不指定路径,则保存到当前路径。
语法
book.save( path, password )
参数
- path :(可选)文件保存路径
- password :(可选)文件打开密码
实例
import xlwings as xwwith xw.App(visible=True) as app:book = app.books[0]book.save(r'E:/test1.xlsx', 123456)
预期:文件保存到E盘,打开需要「输入密码」。
book.to_pdf():导出PDF,如果不指定路径,则保存到当前路径。
注意:Excel必须有「内容」,才能导出PDF,否则会报错
语法
book.to_pdf( path, include, exclude, show )
参数
- path :(可选)PDF文件保存路径,默认当前目录
- include :(可选)包含哪些工作表,单个工作表名 或 多个工作表名的列表
- exclude :(可选)不包含哪些工作表,单个工作表名 或 多个工作表名的列表
- show :(可选)创建后使用默认应用打开PDF,默认值False
实例
import xlwings as xwwith xw.App(visible=True) as app:book = app.books[0]book.sheets[0]['A1'].value = 'text'book.to_pdf(show=True)
预期:PDF文件保存到当前目录下,并「自动打开」。
3、创建工作表
使用工作簿对象 Book ,「创建」工作表,返回工作表对象 Sheet ,一个 Sheet 对应一个工作表,有两种创建方式:
app.books[0].sheets.add()xw.books[0].sheets.add()
创建工作表时,可以「设置表名」。参数2中, after 表示插入到某个表后面, before 表示插入到某个表前面。
app.books[0].sheets.add('name1')xw.books[0].sheets.add('name2')
实例
import xlwings as xwwith xw.App(visible=True) as app:app.books[0].sheets.add('name1')xw.books[0].sheets.add()print('所有工作表:', app.books[0].sheets)
输出:
所有工作表: Sheets([<Sheet [工作簿1]Sheet3>, <Sheet [工作簿1]name1>, <Sheet [工作簿1]Sheet1>])
3.1、使用工作表
通过工作簿对象 Book ,「使用」指定的工作表,根据工作表的名字/索引/序号,并返回工作表对象 Sheet ,有六种方式:
app.books[0].sheets[0]app.books[0].sheets(1)app.books[0].sheets['Sheet1']xw.books[0].sheets[0]xw.books[0].sheets(1)xw.books[0].sheets['Sheet1']
注意:() 根据 序号 选择,从1开始;[]根据 索引 选择,从0开始。
实例
import xlwings as xwwith xw.App(visible=True) as app:book = app.books[0]print(book.sheets[0])print(book.sheets(1))print(book.sheets['Sheet1'])wb = xw.books[0]print(wb.sheets[0])print(wb.sheets(1))print(wb.sheets['Sheet1'])print('工作表列表:', book.sheets)
输出:
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
工作表列表: Sheets([<Sheet [工作簿1]Sheet1>])
3.2、操作工作表
1)工作表名
app.books[0].sheets[0].name = 'sheetName':设置工作表名app.books[0].sheets[0].name:获取工作表名app.books[0].sheets[0].book:获取工作表所属的工作簿app.books[0].sheets[0].index:获取工作表的索引(从1开始)
2)行高列宽
app.books[0].sheets[0].autofit():自适应行高列宽app.books[0].sheets[0].autofit(axis='rows'):自适应行高app.books[0].sheets[0].autofit(axis='columns'):自适应列宽
3)导出工作表(不指定路径,默认保存到当前目录)
app.books[0].sheets[0].to_html():导出 HTMLapp.books[0].sheets[0].to_pdf():导出 PDF(内容不能为空)
4)复制工作表
app.books[0].sheets('sheetName').copy():复制工作表为副本- name:(可选,str)副本的名字
- before:(可选,sheet对象)复制到哪个工作表之前
- after:(可选,sheet对象)复制到哪个工作表之后
3.3、删除工作表
app.books[0].sheets[0].clear_contents():删除文本但保留样式app.books[0].sheets[0].clear_formats():删除样式但保留文本app.books[0].sheets[0].clear():删除文本和样式app.books[0].sheets[0].delete():删除工作表
4、读写单元格
单元格不需要创建,选中单元格「范围」,然后读写即可,一个 Range 对应一个单元格。
4.1、选择单元格
按照范围、位置,选择单元格,并返回单元格对象,有多种方式。
1)按照A1表示法(例:选中A1到B3范围的单元格)
sheet.range('A1')sheet.range('A1:B2')
2)按照坐标位置,坐标从左上角起始
sheet.range(1, 1)sheet.range((1, 1), (3, 4))
3)切片方式选择范围
sheet['A1']sheet['A1:B2']sheet[0, 0]sheet[0:1, 0:4]
4)按照单元格名字
sheet.range('a1_name')
实例
import xlwings as xwwith xw.App(visible=True) as app:book = app.books[0]sheet = book.sheets[0]range1 = sheet.range('A1')print(range1)range2 = sheet.range('A1:B2')print(range2)range3 = sheet.range(1, 1)print(range3)range4 = sheet.range((1, 1), (3, 4))print(range4)print(sheet['A1'])print(sheet['A1:B2'])print(sheet[0, 0])print(sheet[0:1, 0:4])
输出:
<Range [工作簿1]Sheet1!$A$1>
<Range [工作簿1]Sheet1!$A$1:$B$2>
<Range [工作簿1]Sheet1!$A$1>
<Range [工作簿1]Sheet1!$A$1:$D$3>
<Range [工作簿1]Sheet1!$A$1>
<Range [工作簿1]Sheet1!$A$1:$B$2>
<Range [工作簿1]Sheet1!$A$1>
<Range [工作簿1]Sheet1!$A$1:$D$1>
4.2、写入数据到单元格
向指定单元格中写入数据,数据可以是单个值、一维列表、二维列表
sheet.range('A1').value = 'hello Excel'sheet.range('A2').value = [1, 2, 3]sheet.range('A3').value = [[11, 22], [33, 44]]
写入效果参见下图

提示:已经有数据的单元格,再次写入,会覆盖原来的数据,常用来修改单元格数据。
4.3、读取单元格的数据
按照A1表示法,读取指定范围内单元格的数据,读出的数据可以是单个数据、列表、二维列表形式。
sheet.range('A1').valuesheet.range('A2:C2').valuesheet.range('A3:B4').value
我们将上一步写入的数据读出来,输出结果如下:
hello Excel
[1.0, 2.0, 3.0]
[[11.0, 22.0], [33.0, 44.0]]
4.4、设置单元格样式
1)背景颜色
sheet.range('A1:A2').color = '#FF0000':按照颜色代码设置颜色sheet.range('B1').color = (255, 255, 0):按照颜色坐标设置颜色sheet.range('A2').color = None:去除背景颜色sheet.range('A2').color is None:判断背景颜色是否为空sheet.range('B1').color:获取背景颜色
2)行高列宽
sheet.range('A1').row_height:获取行高sheet.range('A1').column_width:获取列宽sheet.range('A1').row_height = 20:设置行高sheet.range('A1').column_width = 20:设置列宽sheet.range('A1').rows.autofit():自适应行高sheet.range('A1').columns.autofit():自适应列宽sheet.range('A1').autofit():自适应行高列宽
3)合并单元格
sheet.range('A1:C1').merge():合并单元格sheet.range('B1:C1').unmerge():取消合并sheet.range('A1').merge_area:返回指定单元格的合并范围,如果没有合并,就返回单元格本身sheet.range('A1').merge_cells:判断是否包含合并单元格(True包含;False不包含)
4)函数公式
sheet.range('D1').formula = '=SUM(A1:C1)':设置函数公式sheet.range('D1').formula:获取函数公式
5)单元格名字
sheet.range('A1').name = 'a1_name':设置单元格名字sheet.range('A1').name:获取单元格名字
6)复制粘贴
sheet.range('A1').copy():将单元格的内容复制到剪贴板sheet.range('A2').paste():将剪贴板的内容复制到单元格
4.4、删除单元格
删除指定范围的单元格、数据、样式
sheet.range('A1').clear_contents():删除数据但保留样式sheet.range('A2').clear_formats():删除样式但保留数据sheet.range('A3').clear():删除数据和样式sheet.range('A1').delete():删除单元格
相关文章:
Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 xlwings模块详解 1、快速入门1、打开Excel2、创建工作簿2.1、使用工作簿2.2、操作…...
Java入门
Java导入包 import 主要用于导入在使用类前准备好了Import 关键字可以多次使用,导入多个包Import 关键字可以多次使用,导入多个类如果同一个包中需要大量的类,那么可以使用通配符进行导入如果Import了不同包,相同名称的类&#x…...
深度解析BERT:从理论到Pytorch实战
本文从BERT的基本概念和架构开始,详细讲解了其预训练和微调机制,并通过Python和PyTorch代码示例展示了如何在实际应用中使用这一模型。我们探讨了BERT的核心特点,包括其强大的注意力机制和与其他Transformer架构的差异。 关注TechLead&#x…...
小程序数据导出文件
小程序josn数据生成excel文件 先从下载传送门将xlsx.mini.min.js拷贝下来,新建xlsx.js文件放入小程序项目文件夹下。 const XLSX require(./xlsx)//在需要用的页面中引入// 定义导出 Excel 报表的方法exportData() {const that thislet newData [{time:2021,val…...
hadoop1.2.1伪分布式搭建
0.使用host-only方式 将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段 注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同 1.Linux环境配置(windows下面的防火墙也要关闭) 1.1修改主…...
【校招VIP】前端JavaScript语言之跨域
考点介绍: 什么是跨域?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域是前端校招的一个重要考点,在面试过程中经常遇到,需要着重掌握。本期分享的前端算法考点之…...
mysql调优小计
1.选择最合适的字段属性:类型、⻓度、是否允许NULL等;尽量把字段设为not null,⼀⾯查询时对⽐是否为null; 2.要尽量避免全表扫描,⾸先应考虑在 where 及 order by 涉及的列上建⽴索引。 3.应尽量避免在 where ⼦句中对…...
AI:04-基于机器学习的蘑菇分类
蘑菇是一类广泛分布的真菌,其中许多种类具有重要的食用和药用价值,但也存在着一些有毒蘑菇。因此,准确地区分可食用和有毒的蘑菇对于保障人们的食品安全和健康至关重要。本研究旨在基于机器学习技术开发一种蘑菇分类系统,以实现对蘑菇的自动分类和识别。通过构建合适的数据…...
算法——排序
排序 下面的代码会用到宏定义,因为再C中没有swap交换函数,所以对于swap的宏定义代码如下: #define swap(a, b) {\__typeof(a) __a a; a b; b __a;\ } 稳定排序: 1.插入排序: 插入排序会将数组,分位两个部…...
leetCode动态规划“不同路径II”
迷宫问题是比较经典的算法问题,一般可以用动态规划、回溯等方法进行解题,这道题目是我昨晚不同路径这道题趁热打铁继续做的,思路与原题差不多,只是有需要注意细节的地方,那么话不多说,直接上coding和解析&a…...
100天精通Python(可视化篇)——第99天:Pyecharts绘制多种炫酷K线图参数说明+代码实战
文章目录 专栏导读一、K线图介绍1. 说明2. 应用场景 二、配置说明三、K线图实战1. 普通k线图2. 添加辅助线3. k线图鼠标缩放4. 添加数据缩放滑块5. K线周期图表 书籍推荐 专栏导读 🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专…...
哈希表与有序表
哈希表与有序表 Set结构 key Map结构 key-value 哈希表 哈希表的时间复杂度都是常数项级别的,但常数较大 增删改查的时间都是常数级别的,与数据量无关 当哈希表存储的值是基础数据类型(Integer - int),哈希表中内…...
什么时候使用RPA?如何使用RPA?需要什么样的硬件支持?需要安装哪些软件?
RPA(Robotic Process Automation)是一种用于自动化执行重复性任务的技术,它可以帮助企业提高工作效率,降低人力成本,并减少人为错误。RPA适用于各种行业和场景,例如财务、人力资源、客户服务、IT运维等。 …...
R语言入门——line和lines的区别
目录 0 引言一、 line()二、 lines() 0 引言 首先,从直观上看,lines比line多了一个s,但它们还是有很大的区别的,下面将具体解释这个两个函数的区别。 一、 line() 从R语言的帮助文档中找到,line()的使用,…...
C语言:static关键字的使用
1.static修饰局部变量 这是static关键字使用最多的情况。我们知道局部变量是在程序运行阶段在栈上创建的,但是static修饰的局部变量是在程序编译阶段在代码段(静态区)创建的。所以在static修饰的变量所在函数执行结束后该变量依然存在。 //…...
AUTOSAR知识点 之 ECUM (三):ECUM的ISOLAR-AB配置及代码解析
目录 1、概述 2、ISOLAR-AB配置 2.1、EcuMGeneral 2.2、EcuMConfiguration 2.2.1、EcuMDefaultShutdownTarget 2.2.2、EcuMDriverInitListOne...
2023年MySQL-8.0.34保姆级安装教程
重点放前面:演示环境为windows环境。 MySQL社区版本安装教程如下: 一、MySQL安装包下载二、安装配置设置三、配置环境变量 大体分为3个步骤:①安装包的下载;②安装配置设置;③配置环境变量 一、MySQL安装包下载 下载官…...
ElasticSearch入门
一、基本命令_cat 1、查看节点信息 http://192.168.101.132:9200/_cat/nodes2、查看健康状况 http://192.168.101.132:9200/_cat/health3、查看主节点的信息 http://192.168.101.132:9200/_cat/master4、查看所有索引 http://192.168.101.132:9200/_cat/indices二、索引一…...
RocketMQ的Broker
1 Broker角色 Broker角色分为ASYNC_MASTER (异步主机)、SYNC_MASTER (同步主机)以及SLAVE (从机)。如果对消息的可靠性要求比较严格,可以采用SYNC_MASTER加SLAV E的部署方式。如果对消息可靠性要求不高,可以采用ASYNC_MASTER加ASL AVE的部署方式。如果只…...
使用Puppeteer进行游戏数据可视化
导语 Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化,以《英雄联盟》为例。 概述 《英雄联盟》是一款由Riot Games开…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
