我正在尝试通过 xlwings 在 Excel 中创建组合图表,但我无法做到这一点。在文档中,它说您可以将图表类型设置为“组合”,但是在运行代码时:
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’
self.xl.ChartType = chart_types_s2i[chart_type]
KeyError: ‘combination’
有没有人能够使用 xlwings 成功创建组合图表,从而能够修复此代码或提供适合他们的示例代码?
列表中的“组合”可能会产生误导。您可以看到如何使用 VBA 完成此操作,将两种图表类型组合在一起。没有称为“组合”的有效图表类型。(深入研究 xlwings 代码,图表类型“组合”可能对 MACOS 有效,但对 Windows 无效)。
创建两个系列并添加到每个系列的图表类型的图表中。 在此示例中,聚集柱形图(xlColumnClustered,类型 51)与折线图(xlLine,类型 4)组合。 此示例使用 xlwings API,因此使用与 VBA 类似的命令。ChartType 数字来自“XlChartType enumeration”列表。这些位于 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()
上述代码示例的输出 如果您在 Excel 中选择“更改图表类型”,它将被列为“组合图表”。