Как удалить запись легенды диаграммы Excel с помощью С#?

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

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


person nathan    schedule 24.01.2012    source источник


Ответы (3)


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

// .
// . code to add series
// .
// remove the legend entry for the newly added series
chart.Legend.LegendEntries(chart.Legend.LegendEntries().Count).Delete();
person nathan    schedule 27.01.2012

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

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

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

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

person Zodman    schedule 04.11.2014

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

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();
}
person user7082766    schedule 27.10.2016