如何使用C#删除Excel图表图例条目?

我想删除Excel图表中某些(但不是全部)系列的图例条目。 根据我的经验,似乎SeriesCollection.Item(index)LegendEntries.Item(index)不相关。 给定一个系列n如何只删除该系列的图例?

我正在使用Office Interop 2010和Visual Studio 2010.通过选择图例条目,然后右键单击并选择“删除”,可以通过GUI轻松完成。

要删除图例条目,您必须知道要删除的图例的索引。 不幸的是,似乎没有通过interop api提供的关系暴露了传奇和系列之间的关系。 然而,有一个hokey解决方法。 要删除特定系列的图例,对我有用的方法是在添加系列后立即删除图例。 这是唯一知道图例索引的时间。

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

我知道最初的问题是关于Office Interop 2010,但这似乎也是在图表中动态显示和隐藏系列的一个很好的参考点,因此我将添加以下顶部,以防它帮助其他人。

如果要在Office 2013中的工作表上显示/隐藏图表对象上的系列(至少在VBA中;不确定互操作),可以执行以下操作:

 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(); }