赞
踩
上篇我讲解了用Python轻松操作Excel表格,需要学习或者查看,可以点击这里。在教程里,阐述了如何读Excel文件、修改Excel文件数据、添加新的Sheet、保存Excel文件。在业务场景中、或者办公自化中,需要根据表格的数据,自动生成曲线图、柱状图或者其他图。那么,我们用python又如何实现呢?
可以处理Excel文件的Python模块有很多,xlwings模块的功能是最齐全的。它不仅能读写和修改,而且能批量处理多个Excel文件。此外,xlwing模块还能与Exce VBA结合使用,在Excel中自动绘制图表。
首先需要安装xlwings库,可以使用pip命令进行安装,具体的命令如下:
pip install xlwings
或者使用conda命令进行安装:
conda install xlwings
如果是其他环境,安装可以参考以前的讲解文章,或者留言讨论,这里不再赘述。
本次将演示两个示例,分别是生成折线图和柱状图。
- 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文件中。
- 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中。
如果大家在运行的例子的过程中,不知发现了没有,excel是在前台运行,程序运行结束后,excel也不自动关闭。如何实现后台自动运行excel呢?
上面的生成折线图的例子中,程序开始按照如下修改即可。
- # 打开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在任务管理器里就不存在了。这才是彻底的退出。
和折线的例子一样,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()

有时业务场景的需要,需要将生成的图表,以图片的形式输出保存。
以上信息是官网的解释信息。翻译如下,path:要存储图片的路径。如果存储了Excel文件,则默认为与Excel文件在同一目录中的图表名称,否则默认为当前工作目录。
chart.to_png("./data_temp_chart.png")
到这里,我们就讲解完了Python使用xlwings库生成图表的操作方法,通过以上的示例,你应该能够掌握如何生成折线图和柱状图,如果要生成其他的图表修改chart.chart_type的值就行。如果想要继续美化你程序自动生成的图表,如颜色、字体大小等,可以设置其他属性,这就需要了解更多xlwings的用法,可以通过xlwings的官方文档来进一步学习,也可以参考xlwings的示例代码库。当然,我也会后面的教程讲解中,会对此知识点的进一步阐述。
最后,由于平台规则,只有当您跟我有更多互动的时候,才会被认定为铁粉。如果您喜欢我的文章,可以点个“关注”,成为铁粉后能第一时间收到文章推送。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。