簡體   English   中英

如何使用C#刪除Excel圖表圖例條目?

[英]How do I remove an Excel Chart Legend Entry with C#?

我想刪除我的Excel圖表中某些(但不是全部)系列的圖例條目。 根據我的經驗,似乎SeriesCollection.Item(index)LegendEntries.Item(index)無關。 給定一個系列n ,我如何只刪除該系列的圖例?

我將Office Interop 2010與Visual Studio 2010一起使用。這可以通過GUI輕松完成,方法是選擇圖例條目,然后右鍵單擊並選擇“刪除”。

要刪除圖例條目,您必須知道要刪除的圖例的索引。 不幸的是,似乎沒有可通過interop api獲得的關系來揭示圖例和系列之間的關系。 但是,有一種解決方法。 要刪除特定系列的圖例,對我有用的方法是在添加系列后立即刪除圖例。 這是圖例索引唯一已知的時間。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM