在上篇文章《Python操作Excel的Xlwings教程(三)》中重點介紹了Xlwings中的Sheet和Range等API知識點。本次推文將繼續(xù)上次的知識點忆家,將繼續(xù)介紹Xlwings中API相關(guān)的知識德迹,并展示一些小例子,讓大家可以跟著教程進行學(xué)習(xí):
我們先來看看Xlwings中的Shape對象浦辨,Office開發(fā)文檔對Shape進行了介紹,傳送門如下:
https://docs.microsoft.com/zh-cn/office/vba/api/excel.shape
即Shape對象代表繪圖層中的對象币厕,例如自選圖形芽腾、任意多邊形、OLE 對象或圖片摊滔。
一、Shapes
假設(shè)我們有一個文件1.xlsx艰躺,在sheet1內(nèi)有一個shape矩形,如下圖所示:
[圖片上傳失敗...(image-2c8813-1603209388492)]
我們進行運行以下的代碼:
import xlwings as xwwb = xw.Book('1.xlsx')wb.sheets[0].shapes # 輸出Shapes([<Shape 'Rectangle 1' in <Sheet [1.xlsx]Sheet1>>])wb.sheets[0].shapes.count # 返回集合中的對象數(shù)左电,輸出1
可以看出上述代碼輸出了這個Excel文件中的Shape對象,且計數(shù)了這個所選sheet頁中形狀的個數(shù)段誊,所以在日常的操作中栈拖,我們可以使用count來對其中的Shape總數(shù)進行統(tǒng)計。
二涩哟、Shape
跟Sheet對象一樣,Shape對象是Shapes集合的成員:我們來看一下Shape中有哪些方法或?qū)傩圆蔚危覀兪褂玫腅xcel文件還是1.xlsx锻弓。先導(dǎo)入模塊,打開文件暴心,引用sheet1工作表:
import xlwings as xwwb = xw.Book('1.xlsx')sheet = wb.sheets[0]
方法或?qū)傩?/p>
xw.Shape(1).activate # 激活里面的一個shape# 或者 sheet.shapes[0].activate, 使用print打印可查看輸出結(jié)果xw.Shape(1).delete # 刪除里面的一個shapexw.Shape(1).height # height 返回或設(shè)置表示形狀高度的點數(shù)杂拨。xw.Shape(1).left # left 返回或設(shè)置表示形狀水平位置的點數(shù)。sheet.shapes[0].top # top 返回或設(shè)置表示形狀垂直位置的點數(shù)sheet.shapes[0].width # width 返回或設(shè)置表示形狀寬度的點數(shù)檀夹。sheet.shapes[0].type # type 返回形狀的類型策橘。輸出 auto_shapexw.Shape(1).name # name 返回或設(shè)置形狀的名稱,此處輸出 Rectangle 1xw.Shape(1).parent # parent 返回形狀的父級,輸出<Sheet [1.xlsx]Sheet1>
Shape的相關(guān)操作就介紹到這里了,個人覺得不是很常用的功能蚌堵,大家有興趣的可以研究Xlwings的main函數(shù)沛婴,來查看Shape對象的使用方法。
三泻蚊、Charts
圖表類的對象是Excel中經(jīng)常碰到的旁仿,Xlwings中頁存在很多操圖表的方法孽糖,接下來我們介紹Xlwings中的圖表對象(Charts和Chart)毅贮。
假設(shè)現(xiàn)在我們有數(shù)據(jù)表2.xlsx,其sheet頁的有一個表格數(shù)據(jù)生成的兩張圖表尘奏,接下來我們使用xlwings來進行相關(guān)的操作:
[圖片上傳失敗...(image-731451-1603209388492)]
import xlwings as xwwb = xw.Book('2.xlsx')sheet = wb.sheets[0]s = sheet.chartsprint(s)
最后一行輸出:
Charts([<Chart **'Chart 1' **in <Sheet [2.xlsx]Sheet1>>,<Chart **'Chart 2' **in <Sheet [2.xlsx]Sheet1>>])
即工作表上所有Chart對象的集合
如果想新增一個圖表炫加,可使用add()方法瑰煎,其有四個參數(shù)可選left俗孝,top,width插勤,height
sheet.charts.add(100,100) # 會在所選sheet上(100,100)位置新建一個圖表(空白表)# left (float, default 0):left position in points# top (float, default 0):top position in points# width (float, default 355):width in points# height (float, default 211):height in pointssheet.charts.count # count屬性可統(tǒng)計圖表的個數(shù)革骨,輸出2
四、Chart
跟之前介紹的Sheet等對象一樣盛卡,chart對象是charts集合的成員筑凫。
那么chart中有哪些API是值的我們關(guān)注的呢?我們來逐個進行介紹:
引用****chart****有兩種方法
sheet.charts[0] # 法一滓技,輸出<Chart 'Chart 1' in <Sheet [2.xlsx]Sheet1>>sheet.charts['圖表 2'] # 法二蔫浆,輸出<Chart 'Chart 2' in <Sheet [2.xlsx]Sheet1>>sheet.charts[0].api #返回所使用引擎的本機對象sheet.charts[0].chart_type) # 返回并設(shè)置圖表的圖表類型,輸出linesheet.charts[1].chart_type # 返回并設(shè)置圖表的圖表類型洗显,輸出bar_clusteredsheet.charts[0].delete() # 使用索引刪除圖表1原环。sheet.charts[0].height # 返回或設(shè)置代表圖表高度sheet.charts[0].left # 返回或設(shè)置代表圖表水平位置sheet.charts[0].top # 返回或設(shè)置代表圖表垂直位置sheet.charts[0].width # 返回或設(shè)置代表圖表寬度sheet.charts[0].name) # 返回或設(shè)置圖表名稱,輸出Chart 1sheet.charts[0].parent ) # 返回圖表的父級對象嘱吗,輸出<Sheet [2.xlsx]Sheet1>sheet.charts[0].set_source_data() # 設(shè)置圖表的源數(shù)據(jù)范圍玄组。
對于設(shè)置圖表的源數(shù)據(jù)范圍的方法set_source_data()滔驾,我們來看一個綜合的例子,
我們打開一個已經(jīng)存在的Excel文件3.xlsx,其sheet工作表有兩列數(shù)據(jù)變量1和變量2俄讹,我們使用Xlwings操作這個數(shù)據(jù)生成我們的圖表哆致,代碼如下:
import xlwings as xwsheet = xw.Book('4.xlsx').sheets[0]#新增chartchart = sheet.charts.add() #數(shù)據(jù)源:sheet.range('A1:B7'),或者sheet.range('A1').expand()chart.set_source_data(sheet.range('A1').expand()) chart.chart_type = 'line' #設(shè)置圖標的類型患膛,此處為線型摊阀,具體的類型查看office官網(wǎng)VBA操作的手冊#標題名稱title='python知識學(xué)堂粉絲數(shù)' chart.api[1].SetElement(2)#設(shè)置標題名稱chart.api[1].ChartTitle.Text =title chart.api[1].SetElement(302) #橫線#橫軸標題名稱chart.api[1].Axes(1).AxisTitle.Text = "日期" chart.api[1].SetElement(311)chart.api[1].Axes(2).AxisTitle.Text = "粉絲數(shù)" #縱軸標題名稱
經(jīng)上述一系列的操作,生成的圖表如下踪蹬,(為了展示圖表是經(jīng)過手動移動位置的胞此,可通過height等屬性進行設(shè)置)
[圖片上傳失敗...(image-93f3f8-1603209388492)]
五、小結(jié)
以上就是Xlwings中Shape和Chart對象的相關(guān)知識跃捣,縱觀全文,干貨還是滿滿的疚漆,是不是覺得使用Xlwings來操作Excel中的這些對象還是很方便呢酣胀?
介紹了上述對象API的相關(guān)知識,相必你也躍躍欲試了愿卸,趕快操作起來吧灵临!