openpyxl 支持利用工作表中单元格的数据,创建条形图、折线图、散点图和饼
图。要创建图表,需要做下列事情:
1.从一个矩形区域选择的单元格,创建一个 Reference 对象。
2.通过传入 Reference 对象,创建一个 Series 对象。
3.创建一个 Chart 对象。
4.将Series 对象添加到 Chart 对象。
5.可选地设置Chart 对象的drawing.top、drawing.left、drawing.width 和drawing.height
变量。
6.将Chart 对象添加到 Worksheet 对象。
Reference 对象需要一些解释。Reference 对象是通过调用 openpyxl.charts. Reference()
函数并传入 3 个参数创建的:
1.包含图表数据的Worksheet 对象。
2.两个整数的元组,代表矩形选择区域的左上角单元格,该区域包含图表数据:元组中第一个整数是行,第二个整数是列。请注意第一行是 1,不是 0。
3.两个整数的元组,代表矩形选择区域的右下角单元格,该区域包含图表数据:元组中第一个整数是行,第二个整数是列。
图 12-9 展示了坐标参数的一些例子。
在交互式环境中输入以下代码,创建一个条形图,将它添加到电子表格中:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.get_active_sheet()
>>> for i in range(1, 11): # create some data in column A sheet['A'
+ str(i)] = i
>>> refObj = openpyxl.charts.Reference(sheet, (1, 1), (10, 1))
>>> seriesObj = openpyxl.charts.Series(refObj, title='First series')
>>> chartObj = openpyxl.charts.BarChart()
>>> chartObj.append(seriesObj)
>>> chartObj.drawing.top = 50 # set the position
>>> chartObj.drawing.left = 100
>>> chartObj.drawing.width = 300 # set the size
>>> chartObj.drawing.height = 200
>>> sheet.add_chart(chartObj)
>>> wb.save('sampleChart.xlsx')
得到的电子表格,如图 12-10 所示。
我们可以调用 openpyxl.charts.BarChart() , 创建一个条形图。也可以调用
openpyxl.charts.LineChart()、openpyxl.charts.ScatterChart()和openpyxl.charts.PieChart(),创建折线图、散点图和饼图。
遗憾的是,在 OpenPyXL 的当前版本中(2.1.4),load_workbook()不会加载 Excel文件中的图表。即使Excel 文件包含图表,加载的Workbook
对象也不会包含它们。如果加载一个 Workbook 对象,然后马上保存到同样的.xlsx 文件名中,实际上就会删除其中的图表。