Search code examples
c#linechartepplus

C# EPPlus how to generate line chart with dash line


For last 2 days I stuck with a line chart issue with EPPlus. My objective is to create a line chart with EPPlus and line style will be dash line like below image. picture attached.

enter image description here

I search a lot Google for 2 days still got no relevant hint to have dash line in chart. I am not sure that at all EPPlus support dash line. I am using EPPlus version 6.0 and .NET Framework version 4.8. This is a sample code which generate chart in excel sheet with one line but I need that line will be dash line. please someone see my code and tell me what is missing in my code for which I could not have dash line style of line chart.

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
var newFile = new FileInfo(filepath);
using (ExcelPackage xlPackage = new ExcelPackage(newFile))
{
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.Add("test");
    worksheet.Cells["A1"].Value = 1;
    worksheet.Cells["A2"].Value = 2;
    worksheet.Cells["A3"].Value = 3;
    worksheet.Cells["A4"].Value = 4;
    worksheet.Cells["A5"].Value = 5;
    worksheet.Cells["A6"].Value = 6;

    worksheet.Cells["B1"].Value = 10000;
    worksheet.Cells["B2"].Value = 10100;
    worksheet.Cells["B3"].Value = 10200;
    worksheet.Cells["B4"].Value = 10150;
    worksheet.Cells["B5"].Value = 10250;
    worksheet.Cells["B6"].Value = 10200;

    //ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmooth);
    ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmoothNoMarkers);
    chart.Series.Add(ExcelRange.GetAddress(1, 2, worksheet.Dimension.End.Row, 2),
                ExcelRange.GetAddress(1, 1, worksheet.Dimension.End.Row, 1));

    var Series = chart.Series[0];
    //chart.Axis[0].MinorGridlines.Fill.Color = Color.Red;
    //chart.Axis[0].MinorGridlines.LineStyle = eLineStyle.LongDashDot;
    chart.Axis[0].RemoveGridlines();
    chart.Axis[1].RemoveGridlines();
    chart.Axis[0].Border.LineStyle = eLineStyle.SystemDash;
    //chart.XAxis.Border.LineStyle = eLineStyle.Dash;
    chart.Series[0].Header = "Blah";
    //chart.Series[0].Border.LineStyle = eLineStyle.DashDot;
    //chart.Axis[0].Border.LineStyle = eLineStyle.Dash;
    
    xlPackage.Save();
    MessageBox.Show("Done");
}

I also check this post but could not implement it in my code Office Open XML: Drawing Dashed Line in Chart

Please push me to right direction to achieve my goal. Thanks in advance.


Solution

  • This works for me with same versions as you.
    You need to add a reference to System.Drawing for the color:

    // ...(code above this line did not change)
    
    ExcelChart chart = worksheet.Drawings.AddChart("LineChart", eChartType.XYScatterSmoothNoMarkers);
    chart.Series.Add(
        ExcelRange.GetAddress(1, 2, worksheet.Dimension.End.Row, 2),
        ExcelRange.GetAddress(1, 1, worksheet.Dimension.End.Row, 1));
    
    chart.Series[0].Header = "Blah";
    
    // Add this:
    chart.Series[0].Border.LineStyle = OfficeOpenXml.Drawing.eLineStyle.Dash;
    chart.Series[0].Border.Width = 2;
    chart.Series[0].Border.Fill.Color = System.Drawing.Color.Blue;
    
    chart.Axis[0].RemoveGridlines();
    chart.Axis[1].RemoveGridlines();
    
    xlPackage.Save();
    

    Result:

    enter image description here