python编程实践:用 xlwings 库自动生成图表的操作方法

上篇我讲解了用Python轻松操作Excel表格,需要学习或者查看,可以点击这里。在教程里,阐述了如何读Excel文件、修改Excel文件数据、添加新的Sheet、保存Excel文件。在业务场景中、或者办公自化中,需要根据表格的数据,自动生成曲线图、柱状图或者其他图。那么,我们用python又如何实现呢?

可以处理Excel文件的Python模块有很多,xlwings模块的功能是最齐全的。它不仅能读写和修改,而且能批量处理多个Excel文件。此外,xlwing模块还能与Exce VBA结合使用,在Excel中自动绘制图表

1、模块安装

首先需要安装xlwings库,可以使用pip命令进行安装,具体的命令如下:

pip install xlwings

或者使用conda命令进行安装:

conda install xlwings

如果是其他环境,安装可以参考以前的讲解文章,或者留言讨论,这里不再赘述。

2、 生成图表的示例

本次将演示两个示例,分别是生成折线图和柱状图。

2.1 生成折线图

import xlwings as xw
# 打开Excel应用
app = xw.App()
#当前活动程序
wb = app.books.active
#当前工作簿
sheet = wb.sheets.active
# 生成图表的数据
sheet.range('A1').value = [['时间', '数量'], ['1日', 2], ['2日', 1], ['3日', 3]
             , ['4日', 4], ['5日', 5], ['6日', 4]]
# 新建一个Excel图表对象
chart = sheet.charts.add(150,10)
# 设置图表数据
#chart.set_source_data(sheet.range('A1:B7'))
chart.set_source_data(sheet.range('A1').expand())

# 设置图表类型为Line
chart.chart_type = 'line'

# 下面对图表美化
# 设置图表标题和坐标轴标签
chart.api[1].SetElement(2)     #显示标题
chart.api[1].ChartTitle.Text = '1-6日销售额动态表'   #设置标题名称

chart.api[1].Axes(1).HasTitle = True
chart.api[1].Axes(2).HasTitle = True
chart.api[1].Axes(1).AxisTitle.Text = '时间'
chart.api[1].Axes(2).AxisTitle.Text = '数量'
# 设置图表序列的名称和颜色
chart.api[1].SeriesCollection(1).Name = '销售额'
# 保存工作簿
wb.save('data_temp_chart.xlsx')

运行结果如下:

以上示例中,我们首先打开Excel应用,获取当前活动的程序和Sheet对象,程序生成图表的数据。然后新建一个Excel图表对象,将数据放到图表中。接着设定图表的标题、坐标轴标签、图表序列的名称,并最后保存到Excel文件中。

2.2 生成柱状图

import xlwings as xw

# 打开Excel文件
wb = xw.Book("data_temp_chart.xlsx")

# 选择一个工作表
sheet = wb.sheets[0]

# 创建一个柱状图
chart = sheet.charts.add(150,50)

# 设置图表数据
chart.set_source_data(sheet.range('A1').expand())

# 设置图表类型为Column
chart.chart_type = 'column_clustered'

# 下面对图表美化
# 设置图表标题和坐标轴标签
chart.api[1].SetElement(3)     #显示标题
chart.api[1].ChartTitle.Text = '1-6日销售额动态图'   #设置标题名称

chart.api[1].Axes(1).HasTitle = True
chart.api[1].Axes(2).HasTitle = True
chart.api[1].Axes(1).AxisTitle.Text = '时间'
chart.api[1].Axes(2).AxisTitle.Text = '数量'
# 设置图表序列的名称和颜色
chart.api[1].SeriesCollection(1).Name = '销售额'
# 保存工作簿
wb.save('data_temp_chart01.xlsx')

运行结果如下:

以上示例中,我们是首先打开上个例子生成的(data_temp_chart.xlsx)Excel文件,获取Sheet1对象。然后新建一个Excel图表对象,并将数据放到图表中。接着设定图表的标题、坐标轴标签、图表序列的名称,并最后保存到Excel文件data_temp_chart01.xlsx中。

2.3 后台自动运行excel

如果大家在运行的例子的过程中,不知发现了没有,excel是在前台运行,程序运行结束后,excel也不自动关闭。如何实现后台自动运行excel呢?

2.3.1 折线图例子的完善

上面的生成折线图的例子中,程序开始按照如下修改即可。

# 打开Excel应用
app = xw.App(visible=False,add_book=True)

参数visible=False,就是excel应用运行前台不可见;add_book=True,自动添加一个新的工作薄。

还有一种方法就是添加下面一句就行了

app.visible = True

在程序最后添加wb.close()、app.quit()和app.kill()。

#关闭工作薄
wb.close()
#退出excel程序,不保存任何工作簿
app.quit()
#通过杀掉进程,强制Excel app退出
app.kill()

在有些教程中,阐述为:“通常情况下,推荐用app.quit()”。这是一种不严谨的说法,只执行这一句,在任务管理器仍然有Excel app进程在活动。你的程序每执行一次,就多一个进程在内存。只有在执行app.kill()后,Excel app在任务管理器里就不存在了。这才是彻底的退出。

2.3.2 柱状图例子的完善

和折线的例子一样,wb = xw.Book("data_temp_chart.xlsx")这一句去掉,按照下面的代码修改:

# 打开Excel应用
app = xw.App(visible=False,add_book=True)
#打开Excel文件
wb = app.books.open("data_temp_chart.xlsx")

在程序最后添加wb.close()、app.quit()和app.kill()。具体不再赘述。为了方面大家学习,给出完整的代码,如下:

import xlwings as xw

# 打开Excel应用
app = xw.App(visible=False,add_book=False)
#打开Excel文件
wb = app.books.open("data_temp_chart.xlsx")
# 打开Excel文件
#wb = xw.Book("data_temp_chart.xlsx")

# 选择一个工作表
sheet = wb.sheets[0]

# 创建一个柱状图
chart = sheet.charts.add(150,50)

# 设置图表数据
chart.set_source_data(sheet.range('A1').expand())

# 设置图表类型为Column
chart.chart_type = 'column_clustered'

# 下面对图表美化
# 设置图表标题和坐标轴标签
chart.api[1].SetElement(3)     #显示标题
chart.api[1].ChartTitle.Text = '1-6日销售额动态图'   #设置标题名称

chart.api[1].Axes(1).HasTitle = True
chart.api[1].Axes(2).HasTitle = True
chart.api[1].Axes(1).AxisTitle.Text = '时间'
chart.api[1].Axes(2).AxisTitle.Text = '数量'
# 设置图表序列的名称和颜色
chart.api[1].SeriesCollection(1).Name = '销售额'
# 保存工作簿
wb.save('data_temp_chart01.xlsx')
#关闭工作薄
wb.close()
#退出excel程序,不保存任何工作簿
app.quit()
#通过杀掉进程,强制Excel app退出
app.kill()

2.4 图表保存

有时业务场景的需要,需要将生成的图表,以图片的形式输出保存。

以上信息是官网的解释信息。翻译如下,path:要存储图片的路径。如果存储了Excel文件,则默认为与Excel文件在同一目录中的图表名称,否则默认为当前工作目录。

chart.to_png("./data_temp_chart.png")

3. 总结

到这里,我们就讲解完了Python使用xlwings库生成图表的操作方法,通过以上的示例,你应该能够掌握如何生成折线图和柱状图,如果要生成其他的图表修改chart.chart_type的值就行。如果想要继续美化你程序自动生成的图表,如颜色、字体大小等,可以设置其他属性,这就需要了解更多xlwings的用法,可以通过xlwings的官方文档来进一步学习,也可以参考xlwings的示例代码库。当然,我也会后面的教程讲解中,会对此知识点的进一步阐述。

最后,由于平台规则,只有当您跟我有更多互动的时候,才会被认定为铁粉。如果您喜欢我的文章,可以点个“关注”,成为铁粉后能第一时间收到文章推送。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值