2012-01-24 75 views
1

我想刪除Excel圖表中某些(但不是全部)系列的圖例條目。從我的經驗看,似乎SeriesCollection.Item(index)LegendEntries.Item(index)是不相關的。鑑於一系列n我該如何刪除該系列的圖例?如何使用C#刪除Excel圖表圖例條目?

我將Office Interop 2010與Visual Studio 2010結合使用。通過選擇圖例條目然後右鍵單擊並選擇「刪除」,可以通過GUI輕鬆完成。

回答

4

要刪除圖例條目,您必須知道要刪除的圖例的索引。不幸的是,似乎沒有通過interop api提供的關係,它揭示了圖例和系列之間的關係。有一個hokey解決方法,但是。要刪除特定系列的圖例,我的方法是在添加系列後立即刪除圖例。這是傳說索引唯一已知的時間。

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

我才知道,原來問題是有關Office 2010互操作,但是這似乎是動態顯示和圖表中隱藏系列也有很好的參考點,所以我會添加以下頂部的情況下,它可以幫助其他。

如果你想顯示/隱藏在chartobject了一系列關於在Office 2013工作表(至少在VBA;關於互操作不知道),你可以做到以下幾點:

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

這個隱藏系列而不刪除它。將其設置爲true以再次顯示系列。

0

我需要從圖表中刪除最後兩個圖例條目,因爲它們是添加了假系列以創建十字線效果。一個系列做了垂直線,另一個系列做了水平線。圖例輸入被刪除後,系列仍然在圖表上,這正是我想要的。我用下面的代碼:

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