提问人:anallaser 提问时间:11/7/2023 更新时间:11/15/2023 访问量:60
如何在 xlwings 中创建组合/组合图?
How to create a combo / combination chart in xlwings?
问:
我正在尝试通过 xlwings 在 excel 中创建一个组合图表,但我无法做到。在文档中,它说您可以将chart_type设置为“组合”,但在运行代码时:
wb = xw.Book()
ws = wb.sheets['Sheet1']
chart = ws.charts.add()
chart.set_source_data(ws.range('B3:E4'))
chart.chart_type = 'combination'
其中范围 B3:E4 只是示例数据。我收到以下错误:
self.xl.ChartType = chart_types_s2i[chart_type]
KeyError: 'combination'
有没有人能够使用 xlwings 成功创建一个组合图表,该组合图能够修复此代码或提供适合他们的示例代码?
答:
1赞
moken
11/8/2023
#1
列表中的“组合”可能具有误导性。您可以看到如何使用 VBA 完成此操作,两种图表类型组合在一起。没有称为“组合”的有效图表类型。(更深入地查看 xlwings 代码,图表类型“组合”可能对 MACOS 有效,但对 Windows 无效)。
创建两个序列,并使用每个序列的图表类型添加到图表中。
在此示例中,簇状柱形图(xlColumnClustered,类型 51)与折线图(xlLine,类型 4)组合在一起。
此示例使用 xlwings API,因此使用与 VBA 类似的命令。ChartType 编号来自“XlChartType 枚举”列表。这些常量位于 xlwings 常量“ChartType”类中,因此您可以根据需要导入常量并使用名称。
import xlwings as xw
with xw.App(visible=False) as app:
wb = xw.Book()
wb.sheets.add()
ws = wb.sheets[0]
# Add the worksheet data to be plotted.
data_list = [
['Salesman', 'Net Sales', 'Target'],
['Wilham', 2600, 3500],
['Simon', 11500, 14000],
['Frank', 13500, 15000],
['Nathan', 17000, 19500],
['Jason', 5500, 7000],
['Anthony', 10000, 13500],
]
### Add data to Sheet from cell A1
ws.range('A1').value = data_list
### Create new chart object 'chart1' and set positioning on sheet
chart1 = ws.charts.add(left=350, top=10, width=520, height=380)
### Add Chart Series 1 and set type
chart1.api[1].SeriesCollection().NewSeries()
chart1.api[1].FullSeriesCollection(1).ChartType = 51 # xlColumnClustered
### Series 1 Data
series1_x = ws.range('A2').expand("down")
series1_y = ws.range('B2').expand("down")
### Add Series 1 data to Chart
chart1.api[1].SeriesCollection(1).XValues = series1_x.api
chart1.api[1].SeriesCollection(1).Values = series1_y.api
chart1.api[1].FullSeriesCollection(1).Name = "Column Chart"
### Add Chart Series 2 and set type
chart1.api[1].SeriesCollection().NewSeries()
chart1.api[1].FullSeriesCollection(2).ChartType = 4 # xlLine
### Series 2 Data
series2_x = ws.range('A2').expand("down")
series2_y = ws.range('C2').expand("down")
### Add Series 2 data to Chart
chart1.api[1].SeriesCollection(2).XValues = series2_x.api
chart1.api[1].SeriesCollection(2).Values = series2_y.api
chart1.api[1].FullSeriesCollection(2).Name = "Line Chart"
wb.save('xlwings_combo_chart.xlsx')
wb.close()
评论