当前位置:   article > 正文

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

python excel图表编程

上篇我讲解了用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 生成折线图

  1. import xlwings as xw
  2. # 打开Excel应用
  3. app = xw.App()
  4. #当前活动程序
  5. wb = app.books.active
  6. #当前工作簿
  7. sheet = wb.sheets.active
  8. # 生成图表的数据
  9. sheet.range('A1').value = [['时间', '数量'], ['1日', 2], ['2日', 1], ['3日', 3]
  10. , ['4日', 4], ['5日', 5], ['6日', 4]]
  11. # 新建一个Excel图表对象
  12. chart = sheet.charts.add(150,10)
  13. # 设置图表数据
  14. #chart.set_source_data(sheet.range('A1:B7'))
  15. chart.set_source_data(sheet.range('A1').expand())
  16. # 设置图表类型为Line
  17. chart.chart_type = 'line'
  18. # 下面对图表美化
  19. # 设置图表标题和坐标轴标签
  20. chart.api[1].SetElement(2) #显示标题
  21. chart.api[1].ChartTitle.Text = '1-6日销售额动态表' #设置标题名称
  22. chart.api[1].Axes(1).HasTitle = True
  23. chart.api[1].Axes(2).HasTitle = True
  24. chart.api[1].Axes(1).AxisTitle.Text = '时间'
  25. chart.api[1].Axes(2).AxisTitle.Text = '数量'
  26. # 设置图表序列的名称和颜色
  27. chart.api[1].SeriesCollection(1).Name = '销售额'
  28. # 保存工作簿
  29. wb.save('data_temp_chart.xlsx')

运行结果如下:

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

2.2 生成柱状图

  1. import xlwings as xw
  2. # 打开Excel文件
  3. wb = xw.Book("data_temp_chart.xlsx")
  4. # 选择一个工作表
  5. sheet = wb.sheets[0]
  6. # 创建一个柱状图
  7. chart = sheet.charts.add(150,50)
  8. # 设置图表数据
  9. chart.set_source_data(sheet.range('A1').expand())
  10. # 设置图表类型为Column
  11. chart.chart_type = 'column_clustered'
  12. # 下面对图表美化
  13. # 设置图表标题和坐标轴标签
  14. chart.api[1].SetElement(3) #显示标题
  15. chart.api[1].ChartTitle.Text = '1-6日销售额动态图' #设置标题名称
  16. chart.api[1].Axes(1).HasTitle = True
  17. chart.api[1].Axes(2).HasTitle = True
  18. chart.api[1].Axes(1).AxisTitle.Text = '时间'
  19. chart.api[1].Axes(2).AxisTitle.Text = '数量'
  20. # 设置图表序列的名称和颜色
  21. chart.api[1].SeriesCollection(1).Name = '销售额'
  22. # 保存工作簿
  23. 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 折线图例子的完善

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

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

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

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

app.visible = True

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

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

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

2.3.2 柱状图例子的完善

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

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

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

  1. import xlwings as xw
  2. # 打开Excel应用
  3. app = xw.App(visible=False,add_book=False)
  4. #打开Excel文件
  5. wb = app.books.open("data_temp_chart.xlsx")
  6. # 打开Excel文件
  7. #wb = xw.Book("data_temp_chart.xlsx")
  8. # 选择一个工作表
  9. sheet = wb.sheets[0]
  10. # 创建一个柱状图
  11. chart = sheet.charts.add(150,50)
  12. # 设置图表数据
  13. chart.set_source_data(sheet.range('A1').expand())
  14. # 设置图表类型为Column
  15. chart.chart_type = 'column_clustered'
  16. # 下面对图表美化
  17. # 设置图表标题和坐标轴标签
  18. chart.api[1].SetElement(3) #显示标题
  19. chart.api[1].ChartTitle.Text = '1-6日销售额动态图' #设置标题名称
  20. chart.api[1].Axes(1).HasTitle = True
  21. chart.api[1].Axes(2).HasTitle = True
  22. chart.api[1].Axes(1).AxisTitle.Text = '时间'
  23. chart.api[1].Axes(2).AxisTitle.Text = '数量'
  24. # 设置图表序列的名称和颜色
  25. chart.api[1].SeriesCollection(1).Name = '销售额'
  26. # 保存工作簿
  27. wb.save('data_temp_chart01.xlsx')
  28. #关闭工作薄
  29. wb.close()
  30. #退出excel程序,不保存任何工作簿
  31. app.quit()
  32. #通过杀掉进程,强制Excel app退出
  33. app.kill()

2.4 图表保存

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

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

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

3. 总结

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号