2012-01-24 19 views
1

私のExcelチャートのシリーズの一部ではなく、すべてのシリーズの凡例を削除します。私の経験から、SeriesCollection.Item(index)LegendEntries.Item(index)は関連していないようです。シリーズが与えられた場合nそのシリーズの凡例だけを削除するにはどうしたらいいですか?C#でExcelグラフの凡例を削除するにはどうすればよいですか?

私はVisual Studio 2010でOffice Interop 2010を使用しています。これは、凡例の項目を選択し、右クリックして[削除]を選択することで簡単にGUIで実行できます。

答えて

4

凡例エントリを削除するには、削除する凡例のインデックスを知る必要があります。残念ながら、凡例とシリーズの関係を公開する相互運用APIを通じて利用できる関係はないようです。しかし、厄介な回避策が1つあります。特定のシリーズの凡例を削除するには、シリーズを追加した直後に凡例を削除するという方法がありました。これは、凡例インデックスがわかっている唯一の時間です。

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

私は元の質問には、Office Interopの2010年についてだった知っているが、これは動的にすぎチャートのシリーズを表示と非表示のための良好な基準点であると思われるので、私は場合には、次のトップを追加します、それが役立ちますその他。

あなたが表示さ/オフィス2013でのワークシート上のChartObjectに上のシリーズを非表示にする場合は(少なくともVBAで、相互運用性についてはよく分からない)、次の操作を行うことができます

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

これは非表示になりますシリーズを取り外すことなく。シリーズを再び表示するには、それをtrueに設定します。

0

グラフから最後の2つの凡例エントリを削除する必要がありました。偽の系列が追加されてクロスヘア効果が作成されたからです。 1つのシリーズは垂直線を作り、もう1つは水平線を作りました。伝説のエントリーが削除された後、シリーズはチャート上に残っていました。これは私が望むものでした。以下のコードを使用しました:

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(); 
} 
関連する問題