添加图表的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引用的是哪个工作簿导致传参错误进而引发报错。

http://img.mukewang.com/climg/611e4c700936bb7423600626.jpg


↓这是write.xlsx中的内容

http://img.mukewang.com/climg/611e4c7009b88fa719441468.jpg


在执行的过程中chart.xlsx成功创建并导入数据↓,应该可以排除是工作簿本身的数据问题http://img.mukewang.com/climg/611e4cee096cd9ad19121466.jpg


所以想就这里问一下两种代码执行结果不同的原因,第二种代码报错的原因、解决方法,以及add_series应该怎么设置所选取的工作簿?(或者这个函数默认的选取工作簿的方法是什么)


写回答

1回答

好帮手慕凡

2021-08-20

同学,你好!

1、两种代码执行不同原因以及第二种代码报错的原因:add_series( )方法中参数错误,如下图:

学生姓名,学生位置应为excel中的工作表名称

http://img.mukewang.com/climg/611f136309b5c99506750208.jpg

2、解决方法:categories、values参数后应是“=工作表名称!坐标”,如下图:

http://img.mukewang.com/climg/611f141409027ea006180208.jpg

http://img.mukewang.com/climg/611f148909ce876c05900858.jpg

3、xlsxwriter.Workbook('chart.xlsx')创建了一个工作簿赋值给excel变量名,之后使用excel调用add_chart( )等函数进行画图,如下图:

http://img.mukewang.com/climg/611f164d094703ec06550555.jpg

​可以在创建工作簿时指定要绘图的excel文件,或将多个excel的数据写到一个excel中进行绘图,祝学习愉快~

0

0 学习 · 4470 问题

查看课程