Python操作Excel的Xlwings教程(四)

在上篇文章《Python操作Excel的Xlwings教程(三)》中重点介绍了Xlwings中的SheetRange等API知识点。本次推文将继续上次的知识点,将继续介绍Xlwings中API相关的知识,并展示一些小例子,让大家可以跟着教程进行学习:

我们先来看看Xlwings中的Shape对象,Office开发文档对Shape进行了介绍,传送门如下:

https://docs.microsoft.com/zh-cn/office/vba/api/excel.shape

即Shape对象代表绘图层中的对象,例如自选图形、任意多边形、OLE 对象或图片。

一、Shapes

假设我们有一个文件1.xlsx,在sheet1内有一个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   # 返回集合中的对象数,输出1

可以看出上述代码输出了这个Excel文件中的Shape对象,且计数了这个所选sheet页中形状的个数,所以在日常的操作中,我们可以使用count来对其中的Shape总数进行统计。

二、Shape

跟Sheet对象一样,Shape对象是Shapes集合的成员:我们来看一下Shape中有哪些方法或属性,我们使用的Excel文件还是1.xlsx。先导入模块,打开文件,引用sheet1工作表:

import xlwings as xwwb = xw.Book('1.xlsx')sheet = wb.sheets[0]

方法或属性

xw.Shape(1).activate       # 激活里面的一个shape# 或者 sheet.shapes[0].activate, 使用print打印可查看输出结果xw.Shape(1).delete         # 删除里面的一个shapexw.Shape(1).height         # height 返回或设置表示形状高度的点数。xw.Shape(1).left           # left 返回或设置表示形状水平位置的点数。sheet.shapes[0].top        # top 返回或设置表示形状垂直位置的点数sheet.shapes[0].width      # width 返回或设置表示形状宽度的点数。sheet.shapes[0].type       # type 返回形状的类型。输出 auto_shapexw.Shape(1).name           # name 返回或设置形状的名称,此处输出 Rectangle 1xw.Shape(1).parent         # parent 返回形状的父级,输出<Sheet [1.xlsx]Sheet1>

Shape的相关操作就介绍到这里了,个人觉得不是很常用的功能,大家有兴趣的可以研究Xlwings的main函数,来查看Shape对象的使用方法。

三、Charts

图表类的对象是Excel中经常碰到的,Xlwings中页存在很多操图表的方法,接下来我们介绍Xlwings中的图表对象(Charts和Chart)。

假设现在我们有数据表2.xlsx,其sheet页的有一个表格数据生成的两张图表,接下来我们使用xlwings来进行相关的操作:

[图片上传失败...(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()方法,其有四个参数可选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属性可统计图表的个数,输出2

四、Chart

跟之前介绍的Sheet等对象一样,chart对象是charts集合的成员。
那么chart中有哪些API是值的我们关注的呢?我们来逐个进行介绍:

引用****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)         # 返回并设置图表的图表类型,输出linesheet.charts[1].chart_type          # 返回并设置图表的图表类型,输出bar_clusteredsheet.charts[0].delete()            # 使用索引删除图表1。sheet.charts[0].height              # 返回或设置代表图表高度sheet.charts[0].left                # 返回或设置代表图表水平位置sheet.charts[0].top                 # 返回或设置代表图表垂直位置sheet.charts[0].width               # 返回或设置代表图表宽度sheet.charts[0].name)               # 返回或设置图表名称,输出Chart 1sheet.charts[0].parent )            # 返回图表的父级对象,输出<Sheet [2.xlsx]Sheet1>sheet.charts[0].set_source_data()   # 设置图表的源数据范围。

对于设置图表的源数据范围的方法set_source_data(),我们来看一个综合的例子,

我们打开一个已经存在的Excel文件3.xlsx,其sheet工作表有两列数据变量1和变量2,我们使用Xlwings操作这个数据生成我们的图表,代码如下:

import xlwings as xwsheet = xw.Book('4.xlsx').sheets[0]#新增chartchart = sheet.charts.add()                        #数据源:sheet.range('A1:B7'),或者sheet.range('A1').expand()chart.set_source_data(sheet.range('A1').expand())  chart.chart_type = 'line' #设置图标的类型,此处为线型,具体的类型查看office官网VBA操作的手册#标题名称title='python知识学堂粉丝数'                    chart.api[1].SetElement(2)#设置标题名称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 = "粉丝数" #纵轴标题名称

经上述一系列的操作,生成的图表如下,(为了展示图表是经过手动移动位置的,可通过height等属性进行设置)

[图片上传失败...(image-93f3f8-1603209388492)]

五、小结

以上就是Xlwings中ShapeChart对象的相关知识,纵观全文,干货还是满满的,是不是觉得使用Xlwings来操作Excel中的这些对象还是很方便呢?

介绍了上述对象API的相关知识,相必你也跃跃欲试了,赶快操作起来吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352