设置图表数据来源
这里数据来源只能是表格的Range类型,所以跨列提取数据是不能直接实现的
chart.set_source_data(ws.range((1, 1)).expand())
设置图表类型
chart.chart_type = 'XXX’
具体的类型可以在xlwings库中main文件chart_type属性的注释查看。常用的有:
不设置,竖向柱状图;bar_clustered,横向聚集柱状图;line,折线图;pie,饼图
chart.heiget
chart.width
绘制学生语文成绩柱状图
基本完整的代码如下,其中,选取了语文成绩列和姓名列作为数据,因为来源数据必须是表格内部的数据,我们不能直接跨列选到这些数据,所以先将这部分数据转入一张新的表中,再依据这段范围生成图表。图表类型为bar_clustered。
app = xlwings.App(visible=True, add_book=False)
app.display_alerts = False
wb = app.books.open('data.xlsx')
ws_data = wb.sheets.active
ws = wb.sheets.add()
cell = ws.range((1, 1))
chart = ws.charts.add(left=cell.left, top=cell.top)
name = ws_data.range((1, 2)).expand('down').value
score = ws_data.range((1, 10)).expand('down').value
data = [name, score]
chart_data = [[name[index], score[index]] for index, value in enumerate(score)]
ws.range((1, 1)).value = chart_data
chart.set_source_data(ws.range((1, 1)).expand())
chart.api[1].ChartTitle.Text = '语文成绩柱状图'
chart.chart_type = '[bar_clustered]()'
图形效果如下
多成绩折线图
与前面相同的步骤,提取数据,存入新工作表,绘制图形。图表类型为line。
app = xlwings.App(visible=True, add_book=False)
app.display_alerts = False
wb = app.books.open('data.xlsx')
ws_data = wb.sheets.active
ws = wb.sheets.add()
cell = ws.range((1, 1))
chart = ws.charts.add(left=cell.left, top=cell.top)
name = ws_data.range((1, 2)).expand('down').value
score = ws_data.range((1, 10)).expand().value
print(name)
print(score)
chart_data = []
for index, value in enumerate(score):
value.insert(0,name[index])
chart_data.append(value)
ws.range((1, 1)).value = chart_data
chart.set_source_data(ws.range((1, 1)).expand())
chart.chart_type = 'line'
效果如下,此处未设置标题,可能是个bug,我电脑设置不了。
选择line_markers类型的图表能看到更多的标记
选择line_stacked类型的堆叠图表能得到类似总分的东西
我真是泰库辣
粉丝