Python操作Excel教程(图文教程,超详细)Python xlwings模块详解,
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》
xlwings模块详解
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)
输出:
工作簿1Sheets([<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').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()
:删除单元格
来源地址:https://blog.csdn.net/wangyuxiang946/article/details/132249339
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341