解决Python编程快速上手P239中openpyxl模块无charts属性的报错问题
自学《Python 编程快速上手》P239 的内容,在运行如下代码时,程序出现了报错。

import openpyxl, os
os.chdir("C:\\")
wb = openpyxl.Workbook()
sheet = wb.active
创建列 A 中的一些数据,范围是从 1 到 10,通过 for 循环来实现,循环变量 i 从 1 开始,到 10 结束。
sheet 的 ['A' + 字符串(i)] 等于 i 。
使用 openpyxl.charts.Reference 函数,传入 sheet 参数以及坐标范围 (1,1) 到 (10,1),将其赋值给 refObj 。
seriesObj 是通过 openpyxl.charts.Series 函数创建的,其引用对象为 refObj,标题为“First series”。
chartObj 是 openpyxl.charts 库中的 BarChart 对象。
chartObj.append(seriesObj)
图表对象的绘图的顶部被设定为 50 。
chartObj.drawing.left = 100
chartObj 的绘图宽度被设置为 300 。 设定其尺寸为 300 。 将 chartObj 的绘图宽度设为 300 。 把 chartObj 的绘图宽度调整为 300 。 让 chartObj 的绘图宽度等于 300 。 为 chartObj 的绘图宽度赋予 300 的值 。 使 chartObj 的绘图宽度变为 300 。 把 chartObj 的绘图宽度设定成 300 。 让 chartObj 的绘图宽度达到 300 。 给 chartObj 的绘图宽度设定为 300 。 使 chartObj 的绘图宽度定在 300 。 让 chartObj 的绘图宽度处于 300 。 把 chartObj 的绘图宽度确定为 300 。
chartObj.drawing.height = 200
sheet.add_chart(chartObj)
wb 将文件保存为“sampleChart.xlsx”。
错误提示表明,在模块“openpyxl”中不存在“charts”这个属性。
问题分析:openpyxl 在后续的版本当中进行了适当的修改。同时,本书原著的作者也针对该章节进行了修改,具体可查看链接:点击打开链接。
问题解决:修改后的代码如下。
import openpyxl, os
os.chdir("C:\\")
wb = openpyxl.Workbook()
sheet = wb.active
for i in range(1, 11): # Create some data in column A
sheet['A' + str(i)] = i
refObj 是通过 openpyxl.chart.Reference 函数创建的,它的起始行是 1,起始列是 1,结束行是 10,结束列是 1,并且是基于指定的 sheet 进行操作的。
seriesObj 是通过 openpyxl.chart.Series 函数创建的,它的引用对象是 refObj,标题为 'First series'
chartObj 是 openpyxl.chart 模块中的 BarChart 对象。
chartObj 的标题为 'My Chart' 。
chartObj.append(seriesObj)
在 sheet 中添加图表 chartObj,位置为 'C5'
wb.save('sampleChart.xlsx')