赞
踩
写在前面:
目前项目需要用python调excel在excel里画直方图,需要画图、设置数据标签之类的,很多参数打开csdn和百度搜索都说的不清不楚,直接放一大堆代码没有任何解释,官方文档全英文没解释,摸清每个参数用法后在此记录,望给下个需要的人提供方便,感谢阅览。
简介:openpyxl是一个python库,用于读写Excel文件。openpyxl.chart是openpyxl中的一个模块,用于在Excel工作簿中创建和操作图表。
要使用该库,首先要安装,安装openpyxl命令如下:
pip install openpyxl
Reference用于创建一个引用对象,该对象指向excel表格中特定区域的数据
Reference(worksheet, min_col=2, min_row=1, max_row=7)
这些参数规定了一个区域是从 (min_row, min_col) 开始,到 (max_row, max_col) 结束(包括这两个单元格)。
示例:
openpyxl.xlsx内的数据
- import openpyxl
- # 导入Reference
- from openpyxl.chart import Reference
- # 存放表格的路径
- excel_path = 'D:\\GC\\openpyxl.xlsx'
- # 使用 openpyxl.load_workbook 加载一个excel工作簿 这个excel是有数据的
- workbook = openpyxl.load_workbook(excel_path)
- # workbook.active 代表当前工作簿活动的工作表 获取到当前活动的工作表
- worksheet = workbook.active
- # 调用Reference获取这张工作表指定区域的数据 传入的参数分别为工作表、开始列、开始行、结束列、结束行
- area = Reference(worksheet,min_col=1,min_row=1,max_col=2,max_row=10)
- # 我们打印一下这个area 看看里面是什么数据
- print(area) # 结果为: 'Sheet1'!$A$1:$B$10 这个结果代表sheet1工作表的A1到B10的数据
使用Reference可以获得excel指定sheet页指定区域的内容,后续可以使用获得的内容进行绘制图表
series对象代表图表中的一个数据系列,每个series对象通常包含一系列的值以及与之关联的类别标签,这些数据可以用于在图表中绘制多系列数据点。
series = Series(values=values, xvalues=xvalues, title='Batch 2')
示例:
openpyxl.xlsx内的数据
- import openpyxl
- # 导入Reference ScatterChart和 Series
- from openpyxl.chart import Reference,ScatterChart,Series
-
- excel_path = 'D:\\GC\\openpyxl.xlsx'
- # 使用 openpyxl.load_workbook 加载一个excel工作簿 这个excel是有数据的
- workbook = openpyxl.load_workbook(excel_path)
- # workbook.active 代表当前工作簿活动的工作表 获取到当前活动的工作表
- worksheet = workbook.active
- # 调用Reference获取这张工作表指定区域的数据 传入的参数分别为工作表、开始列、开始行、结束列、结束行
- id = Reference(worksheet,min_col=1,min_row=2,max_col=1,max_row=20) # 学号
- area_chinese = Reference(worksheet,min_col=2,min_row=2,max_col=2,max_row=20) # 语文成绩
- area_math = Reference(worksheet,min_col=3,min_row=2,max_col=3,max_row=20) # 数学成绩
- # 使用series 设置了两个系列的数据 都是以学号为类别标签
- chinese = Series(values=area_chinese, xvalues=id, title='语文')
- chinese.graphicalProperties.line.noFill = True #关闭系列chinese数据点之间的连接线 默认散点图有连接线
- chinese.marker.symbol = "circle" #设置数据点样式 圆圈
- chinese.marker.graphicalProperties.solidFill = "FF0000" # 点的内部填充颜色
- chinese.marker.graphicalProperties.line.solidFill = "FF0000" #点的外边框颜色
- math = Series(values=area_math, xvalues=id, title='数学')
- math.graphicalProperties.line.noFill = True #关闭系列chinese数据点之间的连接线 默认散点图有连接线
- math.marker.symbol = "circle" #设置数据点样式 圆圈
- math.marker.graphicalProperties.solidFill = "A00800" # 点的内部填充颜色
- math.marker.graphicalProperties.line.solidFill = "A00800" #点的外边框颜色
-
- # 创建一个图表(散点图),并将两个系列的数据都添加到图表中
- chart = ScatterChart()
- # 设置类别标签(即x轴的数据)
-
- chart.append(chinese)
- chart.append(math)
- #将图表添加到工作表
- worksheet.add_chart(chart,'E2')
- #保存工作簿
- workbook.save(excel_path)
结果如图所示:
openpyxl可以在exel绘制图表,包括但不限于,柱状图、折线图、散点图、饼图等,以下是可以绘制的图表类别:
以barchart为例:
- import openpyxl
- # 导入Reference ScatterChart
- from openpyxl.chart import Reference,BarChart,label
-
- excel_path = 'D:\\GC\\openpyxl.xlsx'
- # 使用 openpyxl.load_workbook 加载一个excel工作簿 这个excel是有数据的
- workbook = openpyxl.load_workbook(excel_path)
- # workbook.active 代表当前工作簿活动的工作表 获取到当前活动的工作表
- worksheet = workbook.active
- # 调用Reference获取这张工作表指定区域的数据 传入的参数分别为工作表、开始列、开始行、结束列、结束行
- id = Reference(worksheet,min_col=1,min_row=2,max_col=1,max_row=20) # 学号
- area_chinese = Reference(worksheet,min_col=2,min_row=2,max_col=2,max_row=20) # 语文成绩
- area_math = Reference(worksheet,min_col=3,min_row=2,max_col=3,max_row=20) # 数学成绩
-
- # 创建一个图表(柱状图图)
- chart = BarChart()
-
- # 设置柱状图是水平还是垂直 默认是垂直 这里设置为水平
- chart.type = 'bar' #水平
- # chart.type = 'col' 垂直
-
- # style 更改样式 数字代表内置额样式编号
- chart.style = 8
-
- # title 设置标题
- chart.title = '成绩图'
-
- # 坐标轴名称
- chart.x_axis.title = "学号"
- chart.y_axis.title = "分数"
-
- #设置宽高
- chart.width = 15
- chart.height = 7
-
- # add_data(data, titles_from_data=False): 向图表中添加数据
- chart.add_data(area_chinese)
-
- # set_categories(labels): 设置图表的分类标签,也就是x轴上显示的数据
- # 也可以不设置 不设置时 为默认的1,2,3...... 这里以学号为x轴数据
- chart.set_categories(id)
-
- #设置显示数据标签 dLbls必须是label.DataLabelList类型数据
- chart.dLbls = label.DataLabelList()
- chart.dLbls.showVal = True #显示数据标签
-
- #将图表添加到工作表
- worksheet.add_chart(chart,'E2')
- #保存工作簿
- workbook.save(excel_path)
结果如图:
结尾:
以上就是我在项目中使用到的,了解这些以后就能够完成大部分功能,欢迎补充,欢迎指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。