pythonxlwings使⽤说明_Python操作Excel的Xlwings教程
(⼀)
在⽇常的⼯作中,我们或多或少的都要和Excel打交道。甚⾄在⼀些领域,某⼀些业务⼈员的主要⼯作就是处理Excel表格,处理⼤量的Excel数据并⽣成⼀系列的报表。对于程序员朋友们来说,更喜欢以代码的形式来处理Excel,从⽽实现⼀些Excel中的⼀些函数功能。那么在Python中处理Excel的模块(或者说叫第三⽅库)有哪些呢,主要如下:
Xlrd:xlrd⽀持.xls、.xlsx Excel⽂件的读,并不⽀持.xls、.xlsx ⽂件的写。
Xlwt:xlwt仅⽀持.xls⽂件的写。
Xlsxwriter:xlswriter⽀持.xlsx⽂件的写,另外此模块还⽀持VBA操作。
Win32com:win32com⽀持Excel的.xlsx和.xls,安装pypiwin32即可使⽤该库,该模块现在只⽀持Windows系统。
Openpyxl:openpyxl⽀持Excel2010多种⽂件的操作,read_only和write_only两个参数值得注意,该模块对VBA的⽀持不好,不⽀持.xls⽂件的操作。
Xlwings:xlwings实现了Excel中调⽤Python,python中调⽤Excel的骚操作,⽀持.xls⽂件的读,⽀持.xlsx⽂件的读写,⽀持VBA的操作,另外还⽀持和Numpy、Pandas结合进⾏操作,在很⼤程度上扩展了应⽤。
Pandas :pandas不⽤多说了,数据分析领域最为重要的库,⽀持.xls和.xlsx读写。
接下来就将对Xlwings的相关知识进⾏介绍了:
⼀. 安装(教程使⽤: windows下python3.6.5)
pipinstall xlwings
⼆. 导⼊
importxlwings as xw
注: xlwings的更新和卸载和python其他的库的操作⼀致,不在赘述
三. 实践操作
3.1. 创建新的Excel⽂件
# ⽅法1:
# 创建⼀个新的App,并在新App中新建⼀个Book
wb = xw.Book()
wb.save('1.xlsx')
wb.close()
# ⽅法2:
# 当前App下新建⼀个Book
# visible参数控制创建⽂件时可见的属性
app=xw.App(visible=False,add_book=False)
wb=app.books.add()
wb.save('1.xlsx')
wb.close()
app.quit() #结束进程
下图展⽰了xlwings.mian.app的 init⽅法
image
3.2. 打开已有的Excel⽂件
import xlwings as xw
app=xw.App(visible=True,add_book=False)
app.display_alerts=False #不显⽰Excel消息框
app.screen_updating=False #关闭屏幕更新,可加快宏的执⾏速度
wb=app.books.open('1.xlsx')
# print(wb.fullname) # 输出打开的excle的绝对路径
wb.save()
wb.close()
app.quit() # 退出excel程序,
# app.kill() 通过杀掉进程强制Excel app退出
# 以第⼀种⽅式创建Book时,打开⽂件的操作可如下
wb = xw.Book('1.xlsx')
xw.Book()打开⽂件传⼊的参数可选,具体如下:
image
官⽹中有⼀句提醒:
If you have the same file open in two instances of Excel, you need to fully qualify it and include the app instance. You will find your app instance key (the PID) via xw.apps.keys():
xw.apps[10559].books['FileName.xlsx']
也是就是说:
(1)每个App对应⼀个PID值,这个PID值可以认为是⼀个标签,⽤来识别不同的App。
(2)创建⼯作簿之前要先创建App:
app=xw.App(visible=Ture,add_book=False)
(3)通过xlwings可以创建多个App,每个App⼜可以创建多个⼯作簿,每⼀个⼯作簿中⼜可 以创建多个Sheet。
(4)需要注意的是这些App之间是相互独⽴的,也就是操作不同的⼯作簿的时候就要到对 应的App。
python怎么读取xls文件建议使⽤:xw.Book('filename.xlsx') 来打开⼯作薄或引⽤⼯作簿,不容易出错
xw.Book 和 xw.books使⽤差异
image
3.3. 读⼊和写⼊值
# 在A1单元格写⼊值
# 实例化⼀个⼯作表对象
sheet1 = wb.sheets["sheet1"]
# 或者
# sheet1 =xw.books['1.xlsx'].sheets['sheet1']
# print(sheet1.name) 输出⼯作簿名称
# 写⼊值
sheet1.range('A1').value = 'python知识学堂'
# 读值并打印
print('value of A1:',sheet1.range('A1').value)
# 清空单元格内容,如果A1中是图⽚,此⽅法没有效果
sheet1.range('A1').clear()
# 传⼊列表写⼊多⾏值
sheet1.range('A1').value = [['a','b','c],[1,2,3]]
# 当然也可以将pandas的DataFrame数据写⼊
import pandas as pddf = pd.DataFrame([[1,2], [3,4]], columns=['A', 'B']) sheet1.range('A1').value = df
# 读取数据,输出类型为DataFrame
sheet1.range('A1').options(pd.DataFrame, expand='table').value
# ⽀持添加图⽚的操作
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(x, np.log(x))
sheet1.pictures.add(fig, name='MyPlot', update=True)
n =65
n = chr(n)# ASCII字符
pos ='%s%d' % (n,1)
print(pos)#A1
Tips: 对于A-Z的单元格可以这样进⾏访问,在进⾏循环读写的时候⽐较好⽤3.4. 活动对象
# 但存在活动⼯作表的时候(⽐如打开⼀个1.xlsx⽂件以后),可以直接操作
# 不存在的时候,就需要通过Book经sheet获取range
import xlwings as xw
xw.Range('A1').value = 'Python知识学堂'
Tips: xlwings中的对象层次结构为:
apps->books->sheets->range
3.4. 范围和切⽚取值,范围写值
假设现有的1.xlsx⽂件的数据如下:
image
# 传递字符串或索引/切⽚使得取值更加⽅便
app = xw.App(visible=False,add_book=False)
wb = app.books.open('1.xlsx')
range_1 = wb.sheets[0].range('A1:D3')
print(range_1)
#
print(range_1.value)
# [[None, 'a', 'b', None], [0.0, 1.0, 2.0, None], [1.0, 3.0, 4.0, None]]
# 切⽚⽅式
range_2 = wb.sheets[0][:3, :3]
#
# 写值的情况
# 使⽤列表将1,2,3,4写⼊A1,A2,A3,A4
# transpose=True进⾏转置写⼊
wb.sheets[0].range('A1').options(transpose=True).value=[1,2,3,4]
# 将⼆维数组,储存在A1:B3中
wb.sheets[0].range('A1').options(expand='table')=[[1,2],[3,4],[5,6]]
3.5. ⼀些属性或⽅法
在Excel的读写中,经常需要获取当前打开的⽂件的数据⾏和列数,在Xlwings中的获取⽅式:假设数据⽂件如下:
image
ws = wb.sheets['Sheet1']
shape = ws.used_range.shape
print(shape) #(2, 3)
nrow1 = ws.api.unt
ncol1 = ws.api.unt
print(nrow1) # 2
print(ncol1) # 3
rng = ws.range('A1').expand()
nrow2 = rng.w
ncol2 = rng.lumn
print(nrow2) # 3
print(ncol2) # 1
(I) 如果整张表为空,上述代码输出是怎样的呢?
(II)数据⽂件如下,那么上述代码的输出是怎样的呢?即返回结果是有数据矩阵的⾏数?
image
image
当然我们可以使⽤遍历的⽅式去寻Excel⽂件中⾮空⾏的数量
可以多选⼏列进⾏⼀起判断row =initialwhile(ws.range('A'+str(row)).value!=Nonerownum +=1
UsedRange属性返回⼯作表中所有已使⽤范围的单元格区域是指:单元格中有数值、公式、单元格格式化设置(例如:单元格字体设置、边框设置等等)
⼤家可以对⽐Openpyxl和其他的库,看看计算Excel⽂件数据⾏数和列数的差异,欢迎评论留⾔!
单元格还有其他⼀些属性和⽅法:
# 获取"AB2"单元格的⾏标和列标
print(ws.range('AB2').row)
print(ws.range('AB2').column)
# ⾼度和宽度
print(ws.range('AB2').row_height)
print(ws.range('AB2').column_width)
# 设置颜⾊,可根据RGB颜⾊表寻⾃⼰想要的颜⾊
ws.range('AB2').color = (255,0,0)
# 获取颜⾊
print(ws.range('AB2').color)
# 清除颜⾊格式
ws.range('AB2').color = None
# 使⽤公式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论