在上篇推文《操作Excel的Xlwings教程(四)》中重點介紹了Xlwings中的Shape和Chart等API知識點。本次推文將繼續上次的知識點,將繼續介紹Xlwings中其他API相關的知識,并展示一些小例子,讓大家可以跟著教程進行學習:
一、Pictures
圖片類的操作在Excel中是非常常見的,那么在Xlwings中對圖片的操作有哪些常用的方法和屬性呢?接下來我將介紹其中的一些常用的操作,假設我們現在有一個文件1.xlsx,其sheet頁的有兩張圖片:
我們來看一些代碼:
import xlwings as xwwb = 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的圖像呢?
import matplotlib.pyplot as pltimport numpy as npx = [-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處理大量的數據也有其獨有的優勢,這是值得我們注意的。
不管哪種方式,都是解決問題的方式,都值得我們在平時的學習中進行總結和歸納,感興趣的小伙伴可以生成數據實時這幾種方式到底哪種更優哦。
下次的文章內容還沒想好寫什么,不過也都是跟python,機器學習,辦公自動化等相關的內容啦!因為有一些小伙伴不懂python嘛,所以本人可能更新python的基礎教程,當然在每次的基礎教程后面,本人會出題提供大家練習,也會根據所寫的內容進行拓展哦!