Как да премахна запис в легенда на диаграма на Excel с C#?

Искам да премахна записа в легендата за някои, но не всички, серии в моята диаграма на 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