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():导出 HTML
  • app.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').value
  • sheet.range('A2:C2').value
  • sheet.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():删除单元格

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Eclipse】搭建python环境;运行第一个python程序helloword

目录 0.环境 1.需准备&搭建思路 2.搭建具体步骤 1&#xff09;查看是否安装过python 2&#xff09;安装eclipse 3&#xff09;安装和配置pyDev 3.创建第一个python程序具体步骤 1&#xff09;新建项目 2&#xff09;输入项目名字&#xff0c;和配置选项 3&#x…

STM32WB55开发(1)----套件概述

STM32WB55开发----1.套件概述 所用器件视频教学样品申请优势支持协议系统控制和生态系统访问功能示意图系统框图跳线设置开发板原理图 所用器件 所使用的器件是我们自行设计的开发板&#xff0c;该开发板是基于 STM32WB55 系列微控制器所构建。STM32WBXX_VFQFPN68 不仅是一款评…

leetcode55.跳跃游戏 【贪心】

题目&#xff1a; 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

YOLO目标检测——室内场景识别数据集下载分享

目标检测室内场景识别数据集可以广泛应用于各种需要对室内场景进行目标识别和跟踪的领域&#xff0c;包括安防监控、智能家居、物流仓储管理等 数据集点击下载&#xff1a; YOLO室内场景识别数据集&#xff08;一&#xff09;5950图片26类别.rar YOLO室内场景识别数据集&#…

音频基本知识

声音传播方式: 1)声音的传播需要介质,在真空中不能传播; 2)声波属于纵波,即如下图传播方向与振动方向一致; 声音速度: 1)常温常压下,一般空气速度为340m/s; 2)温度越高,声速越大; 3)液体、固体的传播速度比空气快; 人耳可接收到的频域范围: 1)通常范围…

note_前端框架Vue的安装和简单入门(Windows 11)

1. Vue安装 (1) 下载安装node.js和npm # 下载msi安装包 https://nodejs.org/en# 点击安装包&#xff0c;按提示安装 # 默认安装nodejs, npm, 在线文档; PATH配置# 确认安装是否成功&#xff0c;在dos中输入 node -v # 验证nodejs是否安装成功 npm -v # 验证nodejs包管…

Nginx启动时提示nginx: [emerg] still could not bind()

启动Nginx报这个nginx: [emerg] still could not bind()。 问题原因 nginx启动要使用的端口被占用了 解决方法&#xff1a; 1、根据Nginx配置文件查看配置的端口默认的是80端口&#xff0c;然后我们输出指令查看端口占用情况。 输入命令&#xff1a; netstat -ntlp|grep 8…

【C#项目实战】控制台游戏——勇士斗恶龙(1)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;最近开始正式的步入学习游戏开发的正轨&#xff0c;想要通过写博客的方式来分享自己学到的知识和经验&#xff0c;这就是开设本专栏的目的。希望…

Elasticsearch:wildcard - 通配符搜索

Elasticsearch 是一个分布式、免费和开放的搜索和分析引擎&#xff0c;适用于所有类型的数据&#xff0c;例如文本、数字、地理空间、结构化和非结构化数据。 它基于 Apache Lucene 构建&#xff0c;Apache Lucene 是一个全文搜索引擎&#xff0c;可用于各种编程语言。 由于其速…

HBase集群环境搭建与测试

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)

多线程案例 一、设计模式&#xff08;单例模式工厂模式&#xff09;1、单例模式2、工厂模式 二、阻塞式队列1、生产者消费者模型2、阻塞对列在生产者消费者之间的作用3、用标准库阻塞队列实现生产者消费者模型4、模拟实现阻塞队列 三、定时器1、标准库中的定时器2、模拟实现定时…

go语言基本操作---三

变量的内存和变量的地址 指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于java语言和C/C语言之间&#xff0c;它即没有想Java语言那样取消了代码对指针的直接操作的能力&#xff0c;也避免了C/C语言中由…