如何用C#删除Excel图表图例项
本文关键字:Excel 何用 删除 | 更新日期: 2023-09-27 18:21:14
我想删除Excel图表中某些但不是全部系列的图例条目。根据我的经验,SeriesCollection.Item(index)
和LegendEntries.Item(index)
似乎没有关联。给定一个系列n
,如何仅删除该系列的图例?
我正在将Office Interop 2010与Visual Studio 2010一起使用。这可以通过GUI轻松完成,方法是选择图例条目,然后右键单击并选择"删除"。
// .
// . code to add series
// .
// remove the legend entry for the newly added series
chart.Legend.LegendEntries(chart.Legend.LegendEntries().Count).Delete();
我知道最初的问题是关于OfficeInterop2010的,但这似乎也是在图表中动态显示和隐藏系列的一个很好的参考点,所以我将添加以下顶部,以防对其他人有所帮助。
如果要在Office 2013中的工作表上的图表对象上显示/隐藏序列(至少在VBA中;不确定interop),可以执行以下操作:
Worksheets("MySheetName").ChartObjects("MyChartName").Chart.FullSeriesCollection("MyLedendSeriesName").IsFiltered = false
这将隐藏该系列而不将其删除。将其设置为true可再次显示该系列。
我需要从图表中删除最后两个图例条目,因为它们是为了创建十字线效果而添加的伪系列。一个系列是垂直的,另一个是水平的。图例条目被删除后,该系列仍保留在图表上,这正是我想要的。我使用了以下代码:
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();
}