在上篇推文《操作Excel的Xlwings教程(四)》中重点介绍了Xlwings中的Shape和Chart等API知识点。本次推文将继续上次的知识点,将继续介绍Xlwings中其他API相关的知识,并展示一些小例子,让大家可以跟着教程进行学习:
一、Pictures
图片类的操作在Excel中是非常常见的,那么在Xlwings中对图片的操作有哪些常用的方法和属性呢?接下来我将介绍其中的一些常用的操作,假设我们现在有一个文件1.xlsx,其sheet页的有两张图片:
我们来看一些代码:
importxlwingsasxwwb=xw.Book('1.xlsx')wb.sheets[0].pictures#查看引用的sheet页中图片的对象wb.sheets[0].pictures.count#统计引用的sheet页中图片对象的数量,次数输出2
那么我们如何增加新的图片呢,我们可以这样进行操作:
wb.sheets[0].pictures.add(r'C:\Users\LEGION\Desktop\1.jpg')
当然了增加的图片会有默认的位置,具体的位置大家一试便知,值的说明的是这个add()方法它有几个参数,总结如下:
值的一提的是,Xlwings支持对Matpoltlib对象的操作,那么在Xlwings中怎么插入Matplotlib的图像呢?
importmatplotlib.pyplotaspltimportnumpyasnpx=[-4,-3,-2,-1,0,1,2,3,4]figure=plt.figure()plt.plot(np.cos(x)/2,np.sin(x)/3)wb.sheets[0].pictures.add(figure,name='sin#cos',update=True)
当然,可同样使用上述介绍的参数对图片的位置和大小进行调整。
二、Picture
老话:picture对象是pictures集合的成员
方法和属性:
wb.sheets[0].pictures[0]#引用图片,或者wb.sheets[0].charts['PictureName']wb.sheets[0].pictures[0].delete()#删除图片wb.sheets[0].pictures[0].height#返回或设置代表图片高度wb.sheets[0].pictures[0].left#返回或设置图片水平位置wb.sheets[0].pictures[0].width #返回或设置图片宽度。wb.sheets[0].pictures[0].top #返回或设置图片垂直位置。wb.sheets[0].pictures[0].name #返回或设置图片的名称。wb.sheets[0].pictures[0].parent#返回图片的父级,输出<Sheet[1.xlsx]Sheet1>wb.sheets[0].pictures[0].update('图片路径')#用新图片替换现有图片
以上就是picture对象的相关方法,注意在使用这些方法的时候一定要引用正确的sheet页的picture,不要引用错对象。
前几篇推文和今天介绍的picture就是Xlwings中常见的一些对象知识了。
三、题外分析
有人有可能有这样的一个疑问,Excel的VBA和Xlwings在处理数据方面速度是怎样的呢?这里不在进行写代码的方式来说明,我们来分析一下看看,以便分析一下VBA的在这方面的优势和不足,假设我们现在要计算上十万行Excel文件,操作其中两列数据的和:
方法1:使用Xlwings读Range的数据进行操作,显然这种方式要使用for循环反复的引用range对象,使得在计算的过程中这是非常耗时的。
方法2:使用Xlwings将数据一次性读入python的List中,在List中进行计算返回结果,这样的操作方式避免了大量引用range对象,减少了耗时,当然了数量量很大的时候也就对设备的内存提出了新的要求。
方法3:使用VBA进行操作。VBA是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。跟使用使用第三方库不一样的是,VBA操作的时候是基于更加底层的接口来实现的,所以从这个角度来看,这种方式是肯定比方法1快的。
方法4:当然了,我们知道xlwings是支持pandas的对象的,因此我们也可以使用pandas来进行处理,毕竟pandas是处理数据的神器,而且pandas处理大量的数据也有其独有的优势,这是值得我们注意的。
不管哪种方式,都是解决问题的方式,都值得我们在平时的学习中进行总结和归纳,感兴趣的小伙伴可以生成数据实时这几种方式到底哪种更优哦。