Chart Appearance in Excel document

26 Aug 202424 minutes to read

Chart appearance refers to the customization of visual elements within charts in Excel documents. Using XlsIO, you can customize the chart appearance.

Fill Settings

Solid Fill

The following code example illustrates how to apply a solid color to the chart area, plot area, and data series of the chart.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream inputStream = new FileStream("../../../Data/InputTemplate.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(inputStream);
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set solid fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.SolidColor;
  chartArea.Fill.ForeColor = Color.FromArgb(208,206,206);

  //Set solid fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.SolidColor;
  plotArea.Fill.ForeColor = Color.FromArgb(208, 206, 206);

  //Set solid fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.SolidColor;
  chartFillImpl1.ForeColor = Color.FromArgb(255, 192, 203);
  //chartFillImpl1.ForeColor = Color.Beige;

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.SolidColor;
  chartFillImpl2.ForeColor = Color.FromArgb(143, 170, 220);

  //Saving the workbook as streams
  FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
  workbook.SaveAs(outputStream);

  //Dispose streams
  outputStream.Dispose();
  inputStream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("InputTemplate.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set solid fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.SolidColor;
  chartArea.Fill.ForeColor = Color.FromArgb(208,206,206);

  //Set solid fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.SolidColor;
  plotArea.Fill.ForeColor = Color.FromArgb(208, 206, 206);

  //Set solid fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.SolidColor;
  chartFillImpl1.ForeColor = Color.FromArgb(255, 192, 203);
  //chartFillImpl1.ForeColor = Color.Beige;

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.SolidColor;
  chartFillImpl2.ForeColor = Color.FromArgb(143, 170, 220);

  //Saving the workbook
  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("InputTemplate.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)
  Dim chart As IChart = worksheet.Charts(0)

  'Get data series
  Dim serie1 As IChartSerie = chart.Series(0)
  Dim serie2 As IChartSerie = chart.Series(1)

  'Set solid fill to chart area
  Dim chartArea As IChartFrameFormat = chart.ChartArea
  chartArea.Fill.FillType = ExcelFillType.SolidColor
  chartArea.Fill.ForeColor = Color.FromArgb(208, 206, 206)

  'Set solid fill to plot area
  Dim plotArea As IChartFrameFormat = chart.PlotArea
  plotArea.Fill.FillType = ExcelFillType.SolidColor
  plotArea.Fill.ForeColor = Color.FromArgb(208, 206, 206)

  'Set solid fill to series
  Dim chartFillImpl1 As ChartFillImpl = TryCast(serie1.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl1.FillType = ExcelFillType.SolidColor
  chartFillImpl1.ForeColor = Color.FromArgb(255, 192, 203)

  Dim chartFillImpl2 As ChartFillImpl = TryCast(serie2.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl2.FillType = ExcelFillType.SolidColor
  chartFillImpl2.ForeColor = Color.FromArgb(143, 170, 220)

  'Saving the workbook
  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to apply a solid fill in C# is present on this GitHub page.

Pattern Fill

The following code example illustrates how to apply a pattern fill to the chart area, plot area, and data series of the chart.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream inputStream = new FileStream("../../../Data/InputTemplate.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(inputStream);
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set pattern fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.Pattern;
  chartArea.Fill.BackColor = Color.Pink;
  chartArea.Fill.ForeColor = Color.White;
  chartArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent;

  //Set pattern fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.Pattern;
  plotArea.Fill.BackColor = Color.Pink;
  plotArea.Fill.ForeColor = Color.White;
  plotArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent;

  //Set pattern fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.Pattern;
  chartFillImpl1.BackColor = Color.Pink;
  chartFillImpl1.ForeColor = Color.White;
  chartFillImpl1.Pattern = ExcelGradientPattern.Pat_5_Percent;

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.Pattern;
  chartFillImpl2.BackColor = Color.Gray;
  chartFillImpl2.ForeColor = Color.White;
  chartFillImpl2.Pattern = ExcelGradientPattern.Pat_5_Percent;

  //Saving the workbook as streams
  FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
  workbook.SaveAs(outputStream);

  //Dispose streams
  outputStream.Dispose();
  inputStream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("InputTemplate.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set pattern fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.Pattern;
  chartArea.Fill.BackColor = Color.Pink;
  chartArea.Fill.ForeColor = Color.White;
  chartArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent;

  //Set pattern fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.Pattern;
  plotArea.Fill.BackColor = Color.Pink;
  plotArea.Fill.ForeColor = Color.White;
  plotArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent;

  //Set pattern fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.Pattern;
  chartFillImpl1.BackColor = Color.Pink;
  chartFillImpl1.ForeColor = Color.White;
  chartFillImpl1.Pattern = ExcelGradientPattern.Pat_5_Percent;

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.Pattern;
  chartFillImpl2.BackColor = Color.Gray;
  chartFillImpl2.ForeColor = Color.White;
  chartFillImpl2.Pattern = ExcelGradientPattern.Pat_5_Percent;

  //Saving the workbook
  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("InputTemplate.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)
  Dim chart As IChart = worksheet.Charts(0)

  'Get data series
  Dim serie1 As IChartSerie = chart.Series(0)
  Dim serie2 As IChartSerie = chart.Series(1)

  'Set pattern fill to chart area
  Dim chartArea As IChartFrameFormat = chart.ChartArea
  chartArea.Fill.FillType = ExcelFillType.Pattern
  chartArea.Fill.BackColor = Color.Pink
  chartArea.Fill.ForeColor = Color.White
  chartArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent

  'Set pattern fill to plot area
  Dim plotArea As IChartFrameFormat = chart.PlotArea
  plotArea.Fill.FillType = ExcelFillType.Pattern
  plotArea.Fill.BackColor = Color.Pink
  plotArea.Fill.ForeColor = Color.White
  plotArea.Fill.Pattern = ExcelGradientPattern.Pat_90_Percent

  'Set pattern fill to series
  Dim chartFillImpl1 As ChartFillImpl = TryCast(serie1.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl1.FillType = ExcelFillType.Pattern
  chartFillImpl1.BackColor = Color.Pink
  chartFillImpl1.ForeColor = Color.White
  chartFillImpl1.Pattern = ExcelGradientPattern.Pat_5_Percent

  Dim chartFillImpl2 As ChartFillImpl = TryCast(serie2.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl2.FillType = ExcelFillType.Pattern
  chartFillImpl2.BackColor = Color.Gray
  chartFillImpl2.ForeColor = Color.White
  chartFillImpl2.Pattern = ExcelGradientPattern.Pat_5_Percent

  'Saving the workbook
  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to apply a pattern fill in C# is present on this GitHub page.

Gradient Fill

The following code example illustrates how to apply a gradient fill to the chart area, plot area, and data series of the chart.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream inputStream = new FileStream("../../../Data/InputTemplate.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(inputStream);
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set gradient fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.Gradient;                
  chartArea.Fill.BackColor = Color.FromArgb(205, 217, 234);
  chartArea.Fill.ForeColor = Color.White;

  //Set gradient fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.Gradient;
  plotArea.Fill.BackColor = Color.FromArgb(205, 217, 234);
  plotArea.Fill.ForeColor = Color.White;

  //Set Gradient fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.Gradient;
  chartFillImpl1.GradientColorType = ExcelGradientColor.MultiColor;
  serie1.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal;
  GradientStopImpl gradientStopImpl1 = new GradientStopImpl(new ColorObject(Color.FromArgb(0, 176, 240)), 50000, 100000);
  GradientStopImpl gradientStopImpl2 = new GradientStopImpl(new ColorObject(Color.FromArgb(0, 112, 192)), 70000, 100000);
  chartFillImpl1.GradientStops.GradientType = GradientType.Liniar;
  chartFillImpl1.GradientStops.Add(gradientStopImpl1);
  chartFillImpl1.GradientStops.Add(gradientStopImpl2);

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.Gradient;
  chartFillImpl2.GradientColorType = ExcelGradientColor.MultiColor;
  serie2.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal;
  GradientStopImpl gradientStopImpl3 = new GradientStopImpl(new ColorObject(Color.FromArgb(244, 177, 131)), 40000, 100000);
  GradientStopImpl gradientStopImpl4 = new GradientStopImpl(new ColorObject(Color.FromArgb(255, 102, 0)), 70000, 100000);
  chartFillImpl2.GradientStops.GradientType = GradientType.Liniar;
  chartFillImpl2.GradientStops.Add(gradientStopImpl3);
  chartFillImpl2.GradientStops.Add(gradientStopImpl4);

  //Saving the workbook as streams
  FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
  workbook.SaveAs(outputStream);

  //Dispose streams
  outputStream.Dispose();
  inputStream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("InputTemplate.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];
    
  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set gradient fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.FillType = ExcelFillType.Gradient;                
  chartArea.Fill.BackColor = Color.FromArgb(205, 217, 234);
  chartArea.Fill.ForeColor = Color.White;

  //Set gradient fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.FillType = ExcelFillType.Gradient;
  plotArea.Fill.BackColor = Color.FromArgb(205, 217, 234);
  plotArea.Fill.ForeColor = Color.White;

  //Set Gradient fill to series
  ChartFillImpl chartFillImpl1 = serie1.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl1.FillType = ExcelFillType.Gradient;
  chartFillImpl1.GradientColorType = ExcelGradientColor.MultiColor;
  serie1.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal;
  GradientStopImpl gradientStopImpl1 = new GradientStopImpl(new ColorObject(Color.FromArgb(0, 176, 240)), 50000, 100000);
  GradientStopImpl gradientStopImpl2 = new GradientStopImpl(new ColorObject(Color.FromArgb(0, 112, 192)), 70000, 100000);
  chartFillImpl1.GradientStops.GradientType = GradientType.Liniar;
  chartFillImpl1.GradientStops.Add(gradientStopImpl1);
  chartFillImpl1.GradientStops.Add(gradientStopImpl2);

  ChartFillImpl chartFillImpl2 = serie2.SerieFormat.Fill as ChartFillImpl;
  chartFillImpl2.FillType = ExcelFillType.Gradient;
  chartFillImpl2.GradientColorType = ExcelGradientColor.MultiColor;
  serie2.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal;
  GradientStopImpl gradientStopImpl3 = new GradientStopImpl(new ColorObject(Color.FromArgb(244, 177, 131)), 40000, 100000);
  GradientStopImpl gradientStopImpl4 = new GradientStopImpl(new ColorObject(Color.FromArgb(255, 102, 0)), 70000, 100000);
  chartFillImpl2.GradientStops.GradientType = GradientType.Liniar;
  chartFillImpl2.GradientStops.Add(gradientStopImpl3);
  chartFillImpl2.GradientStops.Add(gradientStopImpl4);

  //Saving the workbook
  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("InputTemplate.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)
  Dim chart As IChart = worksheet.Charts(0)

  'Get data series
  Dim serie1 As IChartSerie = chart.Series(0)
  Dim serie2 As IChartSerie = chart.Series(1)

  'Set gradient fill to chart area
  Dim chartArea As IChartFrameFormat = chart.ChartArea
  chartArea.Fill.FillType = ExcelFillType.Gradient
  chartArea.Fill.BackColor = Color.FromArgb(205, 217, 234)
  chartArea.Fill.ForeColor = Color.White

  'Set gradient fill to plot area
  Dim plotArea As IChartFrameFormat = chart.PlotArea
  plotArea.Fill.FillType = ExcelFillType.Gradient
  plotArea.Fill.BackColor = Color.FromArgb(205, 217, 234)
  plotArea.Fill.ForeColor = Color.White

  'Set Gradient fill to series
  Dim chartFillImpl1 As ChartFillImpl = TryCast(serie1.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl1.FillType = ExcelFillType.Gradient
  chartFillImpl1.GradientColorType = ExcelGradientColor.MultiColor
  serie1.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal
  Dim gradientStopImpl1 As New GradientStopImpl(New ColorObject(Color.FromArgb(0, 176, 240)), 50000, 100000)
  Dim gradientStopImpl2 As New GradientStopImpl(New ColorObject(Color.FromArgb(0, 112, 192)), 70000, 100000)
  chartFillImpl1.GradientStops.GradientType = GradientType.Linear
  chartFillImpl1.GradientStops.Add(gradientStopImpl1)
  chartFillImpl1.GradientStops.Add(gradientStopImpl2)

  Dim chartFillImpl2 As ChartFillImpl = TryCast(serie2.SerieFormat.Fill, ChartFillImpl)
  chartFillImpl2.FillType = ExcelFillType.Gradient
  chartFillImpl2.GradientColorType = ExcelGradientColor.MultiColor
  serie2.SerieFormat.Fill.GradientStyle = ExcelGradientStyle.Horizontal
  Dim gradientStopImpl3 As New GradientStopImpl(New ColorObject(Color.FromArgb(244, 177, 131)), 40000, 100000)
  Dim gradientStopImpl4 As New GradientStopImpl(New ColorObject(Color.FromArgb(255, 102, 0)), 70000, 100000)
  chartFillImpl2.GradientStops.GradientType = GradientType.Linear
  chartFillImpl2.GradientStops.Add(gradientStopImpl3)
  chartFillImpl2.GradientStops.Add(gradientStopImpl4)

  'Saving the workbook
  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to apply a gradient fill in C# is present on this GitHub page.

Picture Fill

The following code example illustrates how to apply a picture fill to the chart area, plot area, and data series of the chart.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream inputStream = new FileStream("../../../Data/InputTemplate.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(inputStream);
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];

  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Getting an image from the stream
  FileStream imageStream1 = new FileStream("../../../Data/Image1.jpg", FileMode.Open, FileAccess.Read);
  Image image1 = Image.FromStream(imageStream1);
  FileStream imageStream2 = new FileStream("../../../Data/Image2.jpg", FileMode.Open, FileAccess.Read);
  Image image2 = Image.FromStream(imageStream2);

  //Set picture fill to chart area
  chart.ChartArea.Fill.UserPicture(image1, "Image");

  //Set picture fill to plot area
  chart.PlotArea.Fill.UserPicture(image1, "Image");

  //Set picture fill to series
  serie1.SerieFormat.Fill.UserPicture(image2, "Image");
  serie2.SerieFormat.Fill.UserPicture(image2, "Image");

  //Saving the workbook
  FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
  workbook.SaveAs(outputStream);
       
  //Dispose streams
  outputStream.Dispose();
  imageStream1.Dispose();
  imageStream2.Dispose();
  inputStream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("Sample.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];

  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set picture fill to chart area
  chart.ChartArea.Fill.UserPicture("Image1.png");

  //Set picture fill to plot area
  chart.PlotArea.Fill.UserPicture("Image1.png");

  //Set picture fill to series
  serie1.SerieFormat.Fill.UserPicture("Image2.png");
  serie2.SerieFormat.Fill.UserPicture("Image2.png");

  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("Sample.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)
  Dim chart As IChart = worksheet.Charts(0)

  'Get data series
  Dim serie1 As IChartSerie = chart.Series(0)
  Dim serie2 As IChartSerie = chart.Series(1)

  'Set picture fill to chart area
  chart.ChartArea.Fill.UserPicture("Image1.png")

  'Set picture fill to plot area
  chart.PlotArea.Fill.UserPicture("Image1.png")

  'Set picture fill to series
  serie1.SerieFormat.Fill.UserPicture("Image2.png")
  serie2.SerieFormat.Fill.UserPicture("Image2.png")

  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to apply a picture fill in C# is present on this GitHub page.

No Fill

The following code example illustrates how to apply a no fill to the chart area, plot area, and data series of the chart.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream inputStream = new FileStream("../../../Data/InputTemplate.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(inputStream, ExcelOpenType.Automatic);
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];

  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set no fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.Visible = false;

  //Set no fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.Visible = false;

  //Set no fill to series
  serie1.SerieFormat.Fill.Visible = false;

  //Saving the workbook as stream
  FileStream outputStream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.Write);
  workbook.SaveAs(outputStream);

  //Dispose streams
  outputStream.Dispose();
  inputStream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("Sample.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];
  IChart chart = worksheet.Charts[0];

  //Get data series
  IChartSerie serie1 = chart.Series[0];
  IChartSerie serie2 = chart.Series[1];

  //Set no fill to chart area
  IChartFrameFormat chartArea = chart.ChartArea;
  chartArea.Fill.Visible = false;

  //Set no fill to plot area
  IChartFrameFormat plotArea = chart.PlotArea;
  plotArea.Fill.Visible = false;

  //Set no fill to series
  serie1.SerieFormat.Fill.Visible = false;

  //Saving the workbook
  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("Sample.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)
  Dim chart As IChart = worksheet.Charts(0)

  'Get data series
  Dim serie1 As IChartSerie = chart.Series(0)
  Dim serie2 As IChartSerie = chart.Series(1)

  'Set no fill to chart area
  Dim chartArea As IChartFrameFormat = chart.ChartArea
  chartArea.Fill.Visible = False

  'Set no fill to plot area
  Dim plotArea As IChartFrameFormat = chart.PlotArea
  plotArea.Fill.Visible = False

  'Set no fill to series
  serie1.SerieFormat.Fill.Visible = False

  'Saving the workbook
  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to apply a no fill in C# is present on this GitHub page.

Layout and Resizing Chart Elements

Layout

The following code snippet illustrates how to set the layout for chart elements such as the plot area and legend.

//Manually positioning chart plot area using Layout
chart.PlotArea.Layout.LayoutTarget = LayoutTargets.inner;
chart.PlotArea.Layout.LeftMode = LayoutModes.edge;
chart.PlotArea.Layout.TopMode = LayoutModes.edge;

//Manually positioning chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.LayoutTarget = LayoutTargets.inner;
chart.PlotArea.Layout.ManualLayout.LeftMode = LayoutModes.edge;
chart.PlotArea.Layout.ManualLayout.TopMode = LayoutModes.edge;

//Manually positioning chart legend area using Layout
chart.Legend.Layout.LeftMode = LayoutModes.edge;
chart.Legend.Layout.TopMode = LayoutModes.edge;

//Manually positioning chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.LeftMode = LayoutModes.edge;
chart.Legend.Layout.ManualLayout.TopMode = LayoutModes.edge;
//Manually positioning chart plot area using Layout
chart.PlotArea.Layout.LayoutTarget = LayoutTargets.inner;
chart.PlotArea.Layout.LeftMode = LayoutModes.edge;
chart.PlotArea.Layout.TopMode = LayoutModes.edge;

//Manually positioning chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.LayoutTarget = LayoutTargets.inner;
chart.PlotArea.Layout.ManualLayout.LeftMode = LayoutModes.edge;
chart.PlotArea.Layout.ManualLayout.TopMode = LayoutModes.edge;

//Manually positioning chart legend area using Layout
chart.Legend.Layout.LeftMode = LayoutModes.edge;
chart.Legend.Layout.TopMode = LayoutModes.edge;

//Manually positioning chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.LeftMode = LayoutModes.edge;
chart.Legend.Layout.ManualLayout.TopMode = LayoutModes.edge;
'Manually positioning chart plot area using Layout
chart.PlotArea.Layout.LayoutTarget = LayoutTargets.inner
chart.PlotArea.Layout.LeftMode = LayoutModes.edge
chart.PlotArea.Layout.TopMode = LayoutModes.edge

'Manually positioning chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.LayoutTarget = LayoutTargets.inner
chart.PlotArea.Layout.ManualLayout.LeftMode = LayoutModes.edge
chart.PlotArea.Layout.ManualLayout.TopMode = LayoutModes.edge

'Manually positioning chart legend area using Layout
chart.Legend.Layout.LeftMode = LayoutModes.edge
chart.Legend.Layout.TopMode = LayoutModes.edge

'Manually positioning chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.LeftMode = LayoutModes.edge
chart.Legend.Layout.ManualLayout.TopMode = LayoutModes.edge

Resizing

The following code snippet illustrates how to resize chart elements such as the plot area, legend, title area, axis area, and data labels.

//Manually resizing chart plot area using Layout
chart.PlotArea.Layout.Left = 70;
chart.PlotArea.Layout.Top = 40;
chart.PlotArea.Layout.Width = 280;
chart.PlotArea.Layout.Height = 200;

//Manually resizing chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.Height = 0.80;
chart.PlotArea.Layout.ManualLayout.Width = 0.65;
chart.PlotArea.Layout.ManualLayout.Top = 0.03;
chart.PlotArea.Layout.ManualLayout.Left = -0.1;

//Manually resizing chart legend area using Layout
chart.Legend.Layout.Left = 400;
chart.Legend.Layout.Top = 150;
chart.Legend.Layout.Width = 150;
chart.Legend.Layout.Height = 100;

//Manually resizing chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.Height = 0.09;
chart.Legend.Layout.ManualLayout.Width = 0.30;
chart.Legend.Layout.ManualLayout.Top = 0.36;
chart.Legend.Layout.ManualLayout.Left = 0.68;

//Manually resizing chart title area using Layout
chart.ChartTitleArea.Text = "Sample Chart";
chart.ChartTitleArea.Layout.Top = 10;
chart.ChartTitleArea.Layout.Left = 150;

//Manually resizing chart title area using Manual Layout
chart.ChartTitleArea.Text = "Sample Chart";
chart.ChartTitleArea.Layout.ManualLayout.Top = 0.005;
chart.ChartTitleArea.Layout.ManualLayout.Left = 0.26;

//Manually resizing axis title area using Layout
chart.PrimaryValueAxis.TitleArea.Layout.Left = 15;
chart.PrimaryValueAxis.TitleArea.Layout.Top = 20;
chart.PrimaryCategoryAxis.TitleArea.Layout.Left = 25;
chart.PrimaryCategoryAxis.TitleArea.Layout.Top = 20;

//Manually resizing axis title area using Manual Layout
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Left = 0.04;
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Top = 0.34;
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Left = 0.38;
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Top = 0.95;

//Manually resizing data label area using Layout
chart.Series[0].DataPoints[0].DataLabels.Layout.Left = 0.09;
chart.Series[0].DataPoints[0].DataLabels.Layout.Top = 0.01;

//Manually resizing data label area using Manual Layout
chart.Series[0].DataPoints[0].DataLabels.Layout.ManualLayout.Left = 0.09;
chart.Series[0].DataPoints[0].DataLabels.Layout.ManualLayout.Top = 0.01;
//Manually resizing chart plot area using Layout
chart.PlotArea.Layout.Left = 70;
chart.PlotArea.Layout.Top = 40;
chart.PlotArea.Layout.Width = 280;
chart.PlotArea.Layout.Height = 200;

//Manually resizing chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.Height = 0.80;
chart.PlotArea.Layout.ManualLayout.Width = 0.65;
chart.PlotArea.Layout.ManualLayout.Top = 0.03;
chart.PlotArea.Layout.ManualLayout.Left = -0.1;

//Manually resizing chart legend area using Layout
chart.Legend.Layout.Left = 400;
chart.Legend.Layout.Top = 150;
chart.Legend.Layout.Width = 150;
chart.Legend.Layout.Height = 100;

//Manually resizing chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.Height = 0.09;
chart.Legend.Layout.ManualLayout.Width = 0.30;
chart.Legend.Layout.ManualLayout.Top = 0.36;
chart.Legend.Layout.ManualLayout.Left = 0.68;

//Manually resizing chart title area using Layout
chart.ChartTitleArea.Text = "Sample Chart";
chart.ChartTitleArea.Layout.Top = 10;
chart.ChartTitleArea.Layout.Left = 150;

//Manually resizing chart title area using Manual Layout
chart.ChartTitleArea.Text = "Sample Chart";
chart.ChartTitleArea.Layout.ManualLayout.Top = 0.005;
chart.ChartTitleArea.Layout.ManualLayout.Left = 0.26;

//Manually resizing axis title area using Layout
chart.PrimaryValueAxis.TitleArea.Layout.Left = 15;
chart.PrimaryValueAxis.TitleArea.Layout.Top = 20;
chart.PrimaryCategoryAxis.TitleArea.Layout.Left = 25;
chart.PrimaryCategoryAxis.TitleArea.Layout.Top = 20;

//Manually resizing axis title area using Manual Layout
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Left = 0.04;
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Top = 0.34;
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Left = 0.38;
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Top = 0.95;

//Manually resizing data label area using Layout
chart.Series[0].DataPoints[0].DataLabels.Layout.Left = 0.09;
chart.Series[0].DataPoints[0].DataLabels.Layout.Top = 0.01;

//Manually resizing data label area using Manual Layout
chart.Series[0].DataPoints[0].DataLabels.Layout.ManualLayout.Left = 0.09;
chart.Series[0].DataPoints[0].DataLabels.Layout.ManualLayout.Top = 0.01;
'Manually resizing chart plot area using Layout
chart.PlotArea.Layout.Left = 70
chart.PlotArea.Layout.Top = 40
chart.PlotArea.Layout.Width = 280
chart.PlotArea.Layout.Height = 200

'Manually resizing chart plot area using Manual Layout
chart.PlotArea.Layout.ManualLayout.Height = 0.80
chart.PlotArea.Layout.ManualLayout.Width = 0.65
chart.PlotArea.Layout.ManualLayout.Top = 0.03
chart.PlotArea.Layout.ManualLayout.Left = -0.1

'Manually resizing chart legend area using Layout
chart.Legend.Layout.Left = 400
chart.Legend.Layout.Top = 150
chart.Legend.Layout.Width = 150
chart.Legend.Layout.Height = 100

'Manually resizing chart legend area using Manual Layout
chart.Legend.Layout.ManualLayout.Height = 0.09
chart.Legend.Layout.ManualLayout.Width = 0.30
chart.Legend.Layout.ManualLayout.Top = 0.36
chart.Legend.Layout.ManualLayout.Left = 0.68

'Manually resizing chart title area using Layout
chart.ChartTitleArea.Text = "Sample Chart"
chart.ChartTitleArea.Layout.Top = 10
chart.ChartTitleArea.Layout.Left = 150

'Manually resizing chart title area using Manual Layout
chart.ChartTitleArea.Text = "Sample Chart"
chart.ChartTitleArea.Layout.ManualLayout.Top = 0.005
chart.ChartTitleArea.Layout.ManualLayout.Left = 0.26

'Manually resizing axis title area using Layout
chart.PrimaryValueAxis.TitleArea.Layout.Left = 15
chart.PrimaryValueAxis.TitleArea.Layout.Top = 20
chart.PrimaryCategoryAxis.TitleArea.Layout.Left = 25
chart.PrimaryCategoryAxis.TitleArea.Layout.Top = 20

'Manually resizing axis title area using Manual Layout
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Left = 0.04
chart.PrimaryValueAxis.TitleArea.Layout.ManualLayout.Top = 0.34
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Left = 0.38
chart.PrimaryCategoryAxis.TitleArea.Layout.ManualLayout.Top = 0.95

'Manually resizing data label area using Layout
chart.Series(0).DataPoints(0).DataLabels.Layout.Left = 0.09
chart.Series(0).DataPoints(0).DataLabels.Layout.Top = 0.01

'Manually resizing data label area using Manual Layout
chart.Series(0).DataPoints(0).DataLabels.Layout.ManualLayout.Left = 0.09
chart.Series(0).DataPoints(0).DataLabels.Layout.ManualLayout.Top = 0.01

Applying 3D Formats

The following code example illustrates how to apply 3D settings such as rotation, side wall, back wall, and floor settings.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Create(2);
  IWorksheet sheet = workbook.Worksheets[0];

  //Insert the data in sheet-1
  sheet.Range["B1"].Text = "Product-A";
  sheet.Range["C1"].Text = "Product-B";
  sheet.Range["D1"].Text = "Product-C";
  sheet.Range["A2"].Text = "Jan";
  sheet.Range["A3"].Text = "Feb";
  sheet.Range["B2"].Number = 25;
  sheet.Range["B3"].Number = 20;
  sheet.Range["C2"].Number = 35;
  sheet.Range["C3"].Number = 25;
  sheet.Range["D2"].Number = 40;
  sheet.Range["D3"].Number = 55;

  IChartShape chart = sheet.Charts.Add();
  chart.DataRange = sheet.Range["A1:D3"];
  chart.ChartType = ExcelChartType.Column_Clustered_3D;

  //Set Rotation of the 3D chart view
  chart.Rotation = 90;

  //Set Back wall fill option
  chart.BackWall.Fill.FillType = ExcelFillType.Gradient;
  //Set Back wall thickness
  chart.BackWall.Thickness = 10;
  //Set Texture Type
  chart.BackWall.Fill.GradientColorType = ExcelGradientColor.TwoColor;
  chart.BackWall.Fill.GradientStyle = ExcelGradientStyle.Diagonl_Down;
  chart.BackWall.Fill.ForeColor = Color.WhiteSmoke;
  chart.BackWall.Fill.BackColor = Color.LightBlue;

  //Set side wall fill option
  chart.SideWall.Fill.FillType = ExcelFillType.SolidColor;
  //Set side wall fore and back color
  chart.SideWall.Fill.BackColor = Color.White;
  chart.SideWall.Fill.ForeColor = Color.White;

  //Set floor fill option
  chart.Floor.Fill.FillType = ExcelFillType.Pattern;
  chart.Floor.Fill.Pattern = ExcelGradientPattern.Pat_10_Percent.Pat_30_Percent;
  //Set floor fore and Back color
  chart.Floor.Fill.ForeColor = Color.Blue;
  chart.Floor.Fill.BackColor = Color.White;
  //Set floor thickness
  chart.Floor.Thickness = 3;

  //Saving the workbook as stream
  FileStream stream = new FileStream("Chart.xlsx", FileMode.Create, FileAccess.ReadWrite);
  workbook.SaveAs(stream);
  stream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Create(2);
  IWorksheet sheet = workbook.Worksheets[0];

  //Insert the data in sheet-1
  sheet.Range["B1"].Text = "Product-A";
  sheet.Range["C1"].Text = "Product-B";
  sheet.Range["D1"].Text = "Product-C";
  sheet.Range["A2"].Text = "Jan";
  sheet.Range["A3"].Text = "Feb";
  sheet.Range["B2"].Number = 25;
  sheet.Range["B3"].Number = 20;
  sheet.Range["C2"].Number = 35;
  sheet.Range["C3"].Number = 25;
  sheet.Range["D2"].Number = 40;
  sheet.Range["D3"].Number = 55;

  IChartShape chart = sheet.Charts.Add();
  chart.DataRange = sheet.Range["A1:D3"];
  chart.ChartType = ExcelChartType.Column_Clustered_3D;

  //Set Rotation of the 3D chart view
  chart.Rotation = 90;

  //Set Back wall fill option
  chart.BackWall.Fill.FillType = ExcelFillType.Gradient;
  //Set Back wall thickness
  chart.BackWall.Thickness = 10;
  //Set Texture Type
  chart.BackWall.Fill.GradientColorType = ExcelGradientColor.TwoColor;
  chart.BackWall.Fill.GradientStyle = ExcelGradientStyle.Diagonl_Down;
  chart.BackWall.Fill.ForeColor = Color.WhiteSmoke;
  chart.BackWall.Fill.BackColor = Color.LightBlue;

  //Set side wall fill option
  chart.SideWall.Fill.FillType = ExcelFillType.SolidColor;
  //Set side wall fore and back color
  chart.SideWall.Fill.BackColor = Color.White;
  chart.SideWall.Fill.ForeColor = Color.White;

  //Set floor fill option
  chart.Floor.Fill.FillType = ExcelFillType.Pattern;
  chart.Floor.Fill.Pattern = ExcelGradientPattern.Pat_10_Percent.Pat_30_Percent;
  //Set floor fore and Back color
  chart.Floor.Fill.ForeColor = Color.Blue;
  chart.Floor.Fill.BackColor = Color.White;
  //Set floor thickness
  chart.Floor.Thickness = 3;

  workbook.SaveAs("Chart.xlsx");
}
Using excelEngine As ExcelEngine = New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Create(2)
  Dim sheet As IWorksheet = workbook.Worksheets(0)

  'Insert data in sheet-1
  sheet.Range("B1").Text = "Product-A"
  sheet.Range("C1").Text = "Product-B"
  sheet.Range("D1").Text = "Product-C"
  sheet.Range("A2").Text = "Jan"
  sheet.Range("A3").Text = "Feb"
  sheet.Range("B2").Number = 25
  sheet.Range("B3").Number = 20
  sheet.Range("C2").Number = 35
  sheet.Range("C3").Number = 25
  sheet.Range("D2").Number = 40
  sheet.Range("D3").Number = 55

  Dim chart As IChartShape = sheet.Charts.Add()
  chart.DataRange = sheet.Range("A1:D3")
  chart.ChartType = ExcelChartType.Column_Clustered_3D

  'Set Rotation of the 3D chart view
  chart.Rotation = 90

  'Set Back wall fill option
  chart.BackWall.Fill.FillType = ExcelFillType.Gradient
  'Set Texture Type
  chart.BackWall.Fill.GradientColorType = ExcelGradientColor.TwoColor
  chart.BackWall.Fill.GradientStyle = ExcelGradientStyle.Diagonl_Down
  chart.BackWall.Fill.ForeColor = Color.WhiteSmoke
  chart.BackWall.Fill.BackColor = Color.LightBlue
  'Set Back wall thickness
  chart.BackWall.Thickness = 10

  'Set side wall fill option
  chart.SideWall.Fill.FillType = ExcelFillType.SolidColor
  'Set sidewall fore and back color
  chart.SideWall.Fill.BackColor = Color.White
  chart.SideWall.Fill.ForeColor = Color.White

  'Set floor fill option
  chart.Floor.Fill.FillType = ExcelFillType.Pattern
  chart.Floor.Fill.Pattern = ExcelGradientPattern.Pat_10_Percent.Pat_30_Percent
  'Set floor fore and Back color
  chart.Floor.Fill.ForeColor = Color.Blue
  chart.Floor.Fill.BackColor = Color.White
  'Set floor thickness
  chart.Floor.Thickness = 3

  workbook.SaveAs("Chart.xlsx")
End Using

A complete working example to apply 3D chart formats in C# is present on this GitHub page.

Explode a Pie Chart

Essential XlsIO allows you to explode either all data points at a single explosion value or each data point at different explosion using Percent of IChartSerieDataFormat interface.

You can either create a pie chart and then explode it or directly create an exploded pie chart using XlsIO. Selecting Pie_Exploded as ChartType inserts a pie chart with a default explosion of 25%. Learn how to Create an Exploded Pie Chart.

Refer the following complete code snippets.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream fileStream = new FileStream("Sample.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(fileStream);
  IWorksheet worksheet = workbook.Worksheets[0];

  //Adding pie chart in the worksheet
  IChartShape chart = worksheet.Charts.Add();
  chart.DataRange = worksheet.Range["A3:B7"];
  chart.ChartType = ExcelChartType.Pie;
  chart.IsSeriesInRows = false;

  //Showing the values of data points
  chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.IsValue = true;

  //Exploding the pie chart to 40%
  chart.Series[0].SerieFormat.Percent = 40;

  //Saving the workbook as stream
  FileStream stream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.ReadWrite);
  workbook.SaveAs(stream);
  stream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("Sample.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];

  //Adding pie chart in the worksheet
  IChartShape chart = worksheet.Charts.Add();
  chart.DataRange = worksheet.Range["A3:B7"];
  chart.ChartType = ExcelChartType.Pie;
  chart.IsSeriesInRows = false;

  //Showing the values of data points
  chart.Series[0].DataPoints.DefaultDataPoint.DataLabels.IsValue = true;

  //Exploding the pie chart to 40%
  chart.Series[0].SerieFormat.Percent = 40;

  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As ExcelEngine = New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("Sample.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)

  'Adding pie chart in the worksheet
  Dim chart As IChartShape = worksheet.Charts.Add
  chart.DataRange = worksheet.Range("A3:B7")
  chart.ChartType = ExcelChartType.Pie
  chart.IsSeriesInRows = False

  'Showing the values of data points
  chart.Series(0).DataPoints.DefaultDataPoint.DataLabels.IsValue = True

  'Exploding the pie chart to 40%
  chart.Series(0).SerieFormat.Percent = 40

  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to explode a pie chart in C# is present on this GitHub page.

Essential XlsIO supports assigning hyperlink to the picture added in a chart in the Excel workbook. To achieve this, create a chart in workbook and add picture to the chart using AddPicture of IPictures interface. You can assign hyperlink to the picture using Add property of IHyperLinks interface.

Refer to the following complete code snippets.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  FileStream fileStream = new FileStream("Sample.xlsx", FileMode.Open, FileAccess.Read);
  IWorkbook workbook = application.Workbooks.Open(fileStream);
  IWorksheet worksheet = workbook.Worksheets[0];

  //Adding chart in the workbook
  IChart chart = workbook.Charts.Add();
  chart.DataRange = worksheet.Range["A1:B6"];
  chart.ChartType = ExcelChartType.Column_Clustered;
  chart.IsSeriesInRows = false;

  //Getting an image from the stream
  FileStream imageStream = new FileStream("Image.png", FileMode.Open, FileAccess.Read);
  Image image = Image.FromStream(imageStream);

  //Adding picture on the chart
  chart.Pictures.AddPicture(1, 1, imageStream);

  //Adding hyperlink to the picture on chart
  worksheet.HyperLinks.Add((workbook.Charts[0].Pictures[0] as IShape), ExcelHyperLinkType.Url, "http://www.Syncfusion.com", "click here");

  //Saving the workbook as stream
  FileStream stream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.ReadWrite);
  workbook.SaveAs(stream);
  stream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Open("Sample.xlsx");
  IWorksheet worksheet = workbook.Worksheets[0];				

  //Adding chart in the workbook
  IChart chart = workbook.Charts.Add();
  chart.DataRange = worksheet.Range["A1:B6"];
  chart.ChartType = ExcelChartType.Column_Clustered;
  chart.IsSeriesInRows = false;

  //Adding picture on the chart
  chart.Pictures.AddPicture("Image.png");

  //Adding hyperlink to the picture on chart
  worksheet.HyperLinks.Add((workbook.Charts[0].Pictures[0] as IShape), ExcelHyperLinkType.Url, "http://www.Syncfusion.com", "click here");

  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As ExcelEngine = New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Open("Sample.xlsx")
  Dim worksheet As IWorksheet = workbook.Worksheets(0)

  'Adding chart in the workbook
  Dim chart As IChart = workbook.Charts.Add
  chart.DataRange = worksheet.Range("A1:B6")
  chart.ChartType = ExcelChartType.Column_Clustered
  chart.IsSeriesInRows = False

  'Adding picture on the chart
  chart.Pictures.AddPicture("Image.png")

  'Adding hyperlink to the picture on chart
  worksheet.HyperLinks.Add(workbook.Charts(0).Pictures(0), ExcelHyperLinkType.Url, "http://www.Syncfusion.com", "click here")

  workbook.SaveAs("Output.xlsx")
End Using

A complete working example for picture hyperlink in chart in C# is present on this GitHub page.

NOTE

XlsIO supports adding picture only to a chart in the workbook,but does not support adding picture to a chart in the worksheet.

Add DataTable to Chart

Data table beneath the chart clearly represents the chart content in table format. While creating a chart, the data table is hidden, and the option should be manually enabled to view it.

Essential XlsIO supports adding data table using HasDataTable of IChart interface. Enabling this property adds the data table beneath the chart.

Refer the following complete code snippets.

using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Create(1);
  IWorksheet worksheet = workbook.Worksheets[0];

  //Assigning data in the worksheet
  worksheet.Range["A1"].Text = "Items";
  worksheet.Range["B1"].Text = "Amount(in $)";
  worksheet.Range["C1"].Text = "Count";

  worksheet.Range["A2"].Text = "Beverages";
  worksheet.Range["A3"].Text = "Condiments";
  worksheet.Range["A4"].Text = "Confections";
  worksheet.Range["A5"].Text = "Dairy Products";
  worksheet.Range["A6"].Text = "Grains / Cereals";

  worksheet.Range["B2"].Number = 2776;
  worksheet.Range["B3"].Number = 1077;
  worksheet.Range["B4"].Number = 2287;
  worksheet.Range["B5"].Number = 1368;
  worksheet.Range["B6"].Number = 3325;

  worksheet.Range["C2"].Number = 925;
  worksheet.Range["C3"].Number = 378;
  worksheet.Range["C4"].Number = 880;
  worksheet.Range["C5"].Number = 581;
  worksheet.Range["C6"].Number = 189;

  //Adding a chart to the worksheet
  IChartShape chart = worksheet.Charts.Add();
  chart.DataRange = worksheet.Range["A1:C6"];
  chart.ChartType = ExcelChartType.Column_Clustered;
  chart.IsSeriesInRows = false;

  //Adding title to the chart
  chart.ChartTitle = "Chart with Data Table";

  //Adding data table to the chart
  chart.HasDataTable = true;

  //Saving the workbook as stream
  FileStream stream = new FileStream("Output.xlsx", FileMode.Create, FileAccess.ReadWrite);
  workbook.SaveAs(stream);
  stream.Dispose();
}
using (ExcelEngine excelEngine = new ExcelEngine())
{
  IApplication application = excelEngine.Excel;
  application.DefaultVersion = ExcelVersion.Xlsx;
  IWorkbook workbook = application.Workbooks.Create(1);
  IWorksheet worksheet = workbook.Worksheets[0];

  //Assigning data in the worksheet
  worksheet.Range["A1"].Text = "Items";
  worksheet.Range["B1"].Text = "Amount(in $)";
  worksheet.Range["C1"].Text = "Count";

  worksheet.Range["A2"].Text = "Beverages";
  worksheet.Range["A3"].Text = "Condiments";
  worksheet.Range["A4"].Text = "Confections";
  worksheet.Range["A5"].Text = "Dairy Products";
  worksheet.Range["A6"].Text = "Grains / Cereals";

  worksheet.Range["B2"].Number = 2776;
  worksheet.Range["B3"].Number = 1077;
  worksheet.Range["B4"].Number = 2287;
  worksheet.Range["B5"].Number = 1368;
  worksheet.Range["B6"].Number = 3325;

  worksheet.Range["C2"].Number = 925;
  worksheet.Range["C3"].Number = 378;
  worksheet.Range["C4"].Number = 880;
  worksheet.Range["C5"].Number = 581;
  worksheet.Range["C6"].Number = 189;

  //Adding a chart to the worksheet
  IChartShape chart = worksheet.Charts.Add();
  chart.DataRange = worksheet.Range["A1:C6"];
  chart.ChartType = ExcelChartType.Column_Clustered;
  chart.IsSeriesInRows = false;

  //Adding title to the chart
  chart.ChartTitle = "Chart with Data Table";

  //Adding data table to the chart
  chart.HasDataTable = true;

  workbook.SaveAs("Output.xlsx");
}
Using excelEngine As ExcelEngine = New ExcelEngine()
  Dim application As IApplication = excelEngine.Excel
  application.DefaultVersion = ExcelVersion.Xlsx
  Dim workbook As IWorkbook = application.Workbooks.Create(1)
  Dim worksheet As IWorksheet = workbook.Worksheets(0)

  'Assigning data in the worksheet
  worksheet.Range("A1").Text = "Items"
  worksheet.Range("B1").Text = "Amount(in $)"
  worksheet.Range("C1").Text = "Count"

  worksheet.Range("A2").Text = "Beverages"
  worksheet.Range("A3").Text = "Condiments"
  worksheet.Range("A4").Text = "Confections"
  worksheet.Range("A5").Text = "Dairy Products"
  worksheet.Range("A6").Text = "Grains / Cereals"

  worksheet.Range("B2").Number = 2776
  worksheet.Range("B3").Number = 1077
  worksheet.Range("B4").Number = 2287
  worksheet.Range("B5").Number = 1368
  worksheet.Range("B6").Number = 3325

  worksheet.Range("C2").Number = 925
  worksheet.Range("C3").Number = 378
  worksheet.Range("C4").Number = 880
  worksheet.Range("C5").Number = 581
  worksheet.Range("C6").Number = 189

  'Adding a chart in the worksheet
  Dim chart As IChartShape = worksheet.Charts.Add
  chart.DataRange = worksheet.Range("A1:C6")
  chart.ChartType = ExcelChartType.Column_Clustered
  chart.IsSeriesInRows = False

  'Adding title to the chart
  chart.ChartTitle = "Chart with Data Table"

  'Adding data table to the chart
  chart.HasDataTable = True

  workbook.SaveAs("Output.xlsx")
End Using

A complete working example to add data table in chart in C# is present on this GitHub page.