1

enter image description hereIs it possible in any way to remove a single DataLabel from a Chart made with EPPlus and C#?

I just want to remove a single one, not the setting for the hole Chart... How can the collection of DataLabels be accessed (dLbls > dLbl)?

var chart = (ExcelBarChart)worksheet.Drawings.AddChart("Chart", eChartType.ColumnStacked);

Also made use of coloring a individual point of Chart with this: Legend color is incorrect in excel chart created using EPPlus

(The red point at the upper right)

Now I want to remove a specific label of a point, with generally applied DataLabels...

chart.DataLabel.ShowValue = true;

Any hint appreciated.

SiL3NC3
  • 690
  • 6
  • 29

1 Answers1

1

I figured out a solution. This Extension method is doing the trick...

public static void RemoveDataLabel(this ExcelBarChart chart, int serieNumber, int objectNumber)
{
    var chartXml = chart.ChartXml;

    var nsa = chart.WorkSheet.Drawings.NameSpaceManager.LookupNamespace("a");
    var nsuri = chartXml.DocumentElement.NamespaceURI;

    var nsm = new XmlNamespaceManager(chartXml.NameTable);
    nsm.AddNamespace("a", nsa);
    nsm.AddNamespace("c", nsuri);

    var dLbls = chart.ChartXml.SelectSingleNode(@"c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser[c:idx[@val='" + serieNumber + "']]/c:dLbls", nsm);

    var dLbl = chartXml.CreateNode(XmlNodeType.Element, "dLbl", nsuri);

    var idx = chartXml.CreateNode(XmlNodeType.Element, "idx", nsuri);
    var valueIdx = chartXml.CreateAttribute("val", nsuri);
    valueIdx.Value = objectNumber.ToString();
    idx.Attributes.Append(valueIdx);
    dLbl.AppendChild(idx);

    var delete = chartXml.CreateNode(XmlNodeType.Element, "delete", nsuri);
    var valueDelete = chartXml.CreateAttribute("val", nsuri);
    valueDelete.Value = "1";
    delete.Attributes.Append(valueDelete);
    dLbl.AppendChild(delete);

    dLbls.AppendChild(dLbl);
}
SiL3NC3
  • 690
  • 6
  • 29