Как удалить запись легенды диаграммы Excel с помощью C #? - PullRequest
1 голос
/ 25 января 2012

Я хочу удалить запись легенды для некоторых, но не для всех серий в моей диаграмме Excel.Из моего опыта кажется, что SeriesCollection.Item(index) и LegendEntries.Item(index) не связаны.Учитывая серию n, как я могу удалить только легенду для этой серии?

Я использую Office Interop 2010 с Visual Studio 2010. Это легко сделать с помощью графического интерфейса, выбрав запись легенды, затем справанажмите и выберите «удалить».

Ответы [ 3 ]

4 голосов
/ 27 января 2012

Чтобы удалить запись легенды, вы должны знать индекс легенды, которую хотите удалить. К сожалению, кажется, что через интерфейс взаимодействия не существует отношений, раскрывающих отношения между легендой и сериалом. Однако есть один обходной путь. Чтобы удалить легенду для определенной серии, подход, который работал для меня, заключался в том, чтобы удалить легенду сразу после добавления серии. Это единственный раз, когда известен индекс легенды.

// .
// . code to add series
// .
// remove the legend entry for the newly added series
chart.Legend.LegendEntries(chart.Legend.LegendEntries().Count).Delete();
1 голос
/ 04 ноября 2014

Я знаю, что первоначальный вопрос был о Office Interop 2010, но, похоже, это хорошая отправная точка для динамического отображения и скрытия рядов в диаграмме, поэтому я добавлю следующую главу на случай, если это поможет другим.

Если вы хотите показать / скрыть серию в объекте chartobject на рабочем листе в Office 2013 (по крайней мере, в VBA; не уверен насчет взаимодействия), вы можете сделать следующее:

Worksheets("MySheetName").ChartObjects("MyChartName").Chart.FullSeriesCollection("MyLedendSeriesName").IsFiltered = false

Этоскрывает серию, не удаляя ее.Установите значение true, чтобы снова показать серию.

0 голосов
/ 28 октября 2016

Мне нужно было удалить последние две записи легенды из диаграммы, потому что они были добавлены в поддельные серии для создания эффекта перекрестия. Одна серия сделана вертикальной линией, а другая горизонтальной. После того, как запись легенды была удалена, серия осталась на графике, чего я и хотел. Я использовал код ниже:

Microsoft.Office.Interop.Excel.ChartObject chartObj = null;
Microsoft.Office.Interop.Excel.Chart chart = null;
Microsoft.Office.Interop.Excel.Legend legend = null;
Microsoft.Office.Interop.Excel.LegendEntries legendEntries = null;
Microsoft.Office.Interop.Excel.LegendEntry legendItem;

int legendEntryCount = 0;

chartObj = (Microsoft.Office.Interop.Excel.ChartObject) xlws.ChartObjects("Chart 1");
chart = chartObj.Chart;
legend = chart.Legend;
legendEntries = (Microsoft.Office.Interop.Excel.LegendEntries) chart.Legend.LegendEntries();
legendEntryCount = legendEntries.Count;
if (legendEntryCount > 2)
{
    legendItem = (Microsoft.Office.Interop.Excel.LegendEntry) legend.LegendEntries(legendEntryCount);
    legendItem.Delete();
    legendItem = (Microsoft.Office.Interop.Excel.LegendEntry) legend.LegendEntries(legendEntryCount - 1);
    legendItem.Delete();
}
...