添加图表的add_series怎么设置取的是哪个工作簿的数据?
来源:4-5 项目作业
坻屿
2021-08-19 20:23:40
import xlsxwriter
import xlrd
def read(path):
excel=xlrd.open_workbook(path)
book=excel.sheet_by_index(0)
result = []
for i in book.get_rows():
content=[]
for j in i:
content.append(j.value)
result.append(content)
return result
def write(content):
excel=xlsxwriter.Workbook('write.xlsx')
book=excel.add_worksheet('study')
for index,data in enumerate(content):
for sub_index,sub_data in enumerate(data):
book.write(index,sub_index,sub_data)
book1=excel.add_worksheet('学生等级')
data=[
['优秀','良好','中等','差'],
[1100,2000,1000,900]
]
book1.write_column('A1',data[0]) #按列添加内容
book1.write_column('B1',data[1])
chart=excel.add_chart({'type':'column'}) #对整个excel对象(≠工作簿)生成图表
chart.add_series({
'categories':'=学生等级!$A$1:$A$4', #横坐标
'values':'=学生等级!$B$1:$B$4', #纵坐标
'name':'=成绩占比' #定义图例的名称
})
chart.set_title({'name':'成绩占比图表'})
book1.insert_chart('A10',chart) #往工作簿对象中插入图表
excel.close()
if __name__=="__main__":
result=read('study.xlsx')
write(result)
↑课堂上的实例没有指明chart.add_series取的是book1工作簿的数据,最终执行过程中没有报错。
import xlsxwriter
import xlrd
def read(path):
excel=xlrd.open_workbook(path)
book=excel.sheet_by_index(0)
final_result=[]
col1_content = []
for i in book.get_rows():
col1_content.append(i[0].value)
final_result.append(col1_content)
col2_content = []
for j in book.get_rows():
col2_content.append(j[3].value)
final_result.append(col2_content)
return final_result
def draw_chart(content):
excel=xlsxwriter.Workbook('chart.xlsx')
sheet1=excel.add_worksheet('data')
sheet2=excel.add_worksheet('chart')
sheet1.write_row('A1',content[0])
sheet1.write_row('A2',content[1])
chart=excel.add_chart({'type':'column'})
chart.add_series({
'categories':'=学生姓名!$B$1:$F$1', #横坐标
'values':'=学生等级!$B$2:$F$2', #纵坐标
'name':'=成绩' #定义图例的名称
})
chart.set_title({'name': '成绩情况'})
sheet2.insert_chart('A1',chart)
excel.close()
if __name__=="__main__":
result=read('write.xlsx')
print(result)
draw_chart(result)
↑我在尝试的时候没有指明chart.add_series中的工作簿,执行时会报错,貌似提示引用工作簿出现错误↓,所以我推测是不是没有指明chart.add_series引用的是哪个工作簿导致传参错误进而引发报错。
↓这是write.xlsx中的内容
在执行的过程中chart.xlsx成功创建并导入数据↓,应该可以排除是工作簿本身的数据问题
所以想就这里问一下两种代码执行结果不同的原因,第二种代码报错的原因、解决方法,以及add_series应该怎么设置所选取的工作簿?(或者这个函数默认的选取工作簿的方法是什么)
1回答
同学,你好!
1、两种代码执行不同原因以及第二种代码报错的原因:add_series( )方法中参数错误,如下图:
学生姓名,学生位置应为excel中的工作表名称
2、解决方法:categories、values参数后应是“=工作表名称!坐标”,如下图:
3、xlsxwriter.Workbook('chart.xlsx')创建了一个工作簿赋值给excel变量名,之后使用excel调用add_chart( )等函数进行画图,如下图:
可以在创建工作簿时指定要绘图的excel文件,或将多个excel的数据写到一个excel中进行绘图,祝学习愉快~
相似问题
回答 1
回答 1