#excel #charts #line #pywin32
#превосходить #Диаграммы #линия #pywin32
Вопрос:
Я должен создать линейную диаграмму из первого и третьего столбцов листа с тремя столбцами.
Например
Gender Responses Index Female 325 2.52 Male 243 3.15 Other 127 4.21
то есть значения должны быть взяты из индекса, а метки-из пола. Поэтому я написал
chart = excel.Charts.Add(After=wb.Sheets(wb.Sheets.Count)) chart.Name = "LineChart" chart.Type = win32c.xlLine chart.HasTitle = True chart.ChartTitle.Text = "Just a title" chart.SetSourceData(dist_ws.Range("A1:A4", "C1:C4"))
но это не работает. Диапазон получает все три столбца, и в любом случае я получаю исключение. Я тоже пытался
chart.SetSourceData(dist_ws.Range("A1:A4, C1:C4"))
и
chart.SetSourceData(dist_ws.Range("A2:A4, C1:C4"))
но это не работает. Поэтому мне нужно отдельно задать исходные данные (в C2:C4 с именем серии в C1) и метки оси X (в A2:A4).
Есть идеи, что я делаю не так?
Комментарии:
1. Догадка, но попробуй
dist_ws.Range("A1:A4,C1:C4"))
2. Я постараюсь дать тебе знать. Спасибо.
3. Нет. Это не работает. Мне нужно найти, чтобы установить отдельно значения и метки категорий оси X для линейного графика.
Ответ №1:
Я решил эту проблему совершенно по-другому:
# FIRST, I create a new sheet to allocate chart chart_ws = wb.Sheets.Add(After=wb.Sheets(wb.Sheets.Count)) chart_ws.Name = "Anyname" # SECOND, I add a line chart in it chart_ws.Shapes.AddChart2(-1, win32c.xlLineMarkers, 0, 0, 560, 320).Select() chart = wb.ActiveChart chart.HasTitle = True chart.ChartTitle.Text = "Any title" # THIRD, I create a series for data series = chart.SeriesCollection().NewSeries() # FOURTH, I set the two ranges for labels and values # Warning: ranges do NOT includes headers (A1 and C1) # A1 is used to name the series series.XValues = dist_ws.Range("A2:A4") series.Values = dist_ws.Range("C2:C4") series.Name = dist_ws.Range("A1").Value
Это работает.