Articles in this section
Category / Section

How to copy and insert a chart in the same worksheet using C#,VB.NET?

1 min read

This article explains how to copy and insert a chart in the same worksheet in XlsIO using C#/VB.NET.

How to copy and insert chart in same worksheet?

When a chart with same formatting is to be applied for different charts, there is no need of creating a new chart every time. Instead, we can copy the existing chart and make use of the cloned chart. This can be achieved by cloning and repositioned the chart in the worksheet.

To copy and insert a chart in same worksheet, you need to follow the below steps.

Steps to copy and insert a chart

  1. Create a workbook and add chart data in it.
//Create a workbook
IWorkbook workbook = application.Workbooks.Create(1);
IWorksheet worksheet = workbook.Worksheets[0];
 
//Add chart data
object[] Yvalues = new object[] { 2000, 1000, 1000 };
object[] Xvalues = new object[] { "Total Income", "Expenses", "Profit" };

 

  1. Add a chart in the worksheet.
//Create chart
IChartShape chart = worksheet.Charts.Add();
chart.Name = "Original";
//Set positions
chart.TopRow = 1;
chart.LeftColumn = 1;
chart.RightColumn = 6;
chart.BottomRow = 10;
 
//Set chart type
IChartSerie serie = chart.Series.Add(ExcelChartType.Pie);
 
//Enters the X and Y values directly
serie.EnteredDirectlyValues = Yvalues;
serie.EnteredDirectlyCategoryLabels = Xvalues;

 

The below screenshot shows output of the chart created using the above code.

  1. Then clone the chart added and set the positions for the new chart.
//Copying the existing chart
IChartShape chartCopy = (IChartShape)(chart as ChartShapeImpl).Clone(chart.Parent);
chartCopy.Name = "Copied";
 
//Set positions
chartCopy.TopRow = 1;
chartCopy.LeftColumn = 8;
chartCopy.RightColumn = 13;
chartCopy.BottomRow = 10;

 

  1. Add data for the new chart.
//Add new chart data
Yvalues = new object[] { 3500, 2500, 1000 };
Xvalues = new object[] { "Total Income", "Expenses", "Profit" };
 
chartCopy.Series[0].EnteredDirectlyValues = Yvalues;
chartCopy.Series[0].EnteredDirectlyCategoryLabels = Xvalues;

 

  1. Save the workbook.
//Save and close the workbook
Stream outStream = File.Create("Output.xlsx");
workbook.SaveAs(outStream);

 

To know more about working with charts in XlsIO, please refer the documentation.

Download complete sample

The following C#/VB.NET complete code snippet shows how to copy and insert a chart in the same worksheet in XlsIO.

using Syncfusion.XlsIO;
using Syncfusion.XlsIO.Implementation.Shapes;
using System.Drawing;
using System.IO;
using System.Reflection;
 
namespace XlsIO_Sample
{
    class Program
    {
        public static void Main(string[] args)
        {
            //Instantiate the spreadsheet creation engine
            using (ExcelEngine excelEngine = new ExcelEngine())
            {
                IApplication application = excelEngine.Excel;
 
                //Create a workbook
                IWorkbook workbook = application.Workbooks.Create(1);
                IWorksheet worksheet = workbook.Worksheets[0];
 
                //Add chart data
                object[] Yvalues = new object[] { 2000, 1000, 1000 };
                object[] Xvalues = new object[] { "Total Income", "Expenses", "Profit" };
 
                //Create chart
                IChartShape chart = worksheet.Charts.Add();
                chart.ChartTitle = "Original";
 
                //Set positions
                chart.TopRow = 1;
                chart.LeftColumn = 1;
                chart.RightColumn = 6;
                chart.BottomRow = 10;
 
                //Set chart type
                IChartSerie serie = chart.Series.Add(ExcelChartType.Pie);
 
                //Enters the X and Y values directly
                serie.EnteredDirectlyValues = Yvalues;
                serie.EnteredDirectlyCategoryLabels = Xvalues;
 
                //Copying the existing chart
                IChartShape chartCopy = (IChartShape)(chart as ChartShapeImpl).Clone(chart.Parent);
                chartCopy.ChartTitle = "Copied";
 
                //Set positions
                chartCopy.TopRow = 1;
                chartCopy.LeftColumn = 8;
                chartCopy.RightColumn = 13;
                chartCopy.BottomRow = 10;
 
                //Add new chart data
                Yvalues = new object[] { 3500, 2500, 1000 };
                Xvalues = new object[] { "Total Income", "Expenses", "Profit" };
                chartCopy.Series[0].EnteredDirectlyValues = Yvalues;
                chartCopy.Series[0].EnteredDirectlyCategoryLabels = Xvalues;
 
                //Save and close the workbook
                Stream outStream = File.Create("Output.xlsx");
                workbook.SaveAs(outStream);
            }
        }
    }
}

 

 
Imports Syncfusion.XlsIO
Imports Syncfusion.XlsIO.Implementation.Shapes
Imports System.Drawing
Imports System.IO
Imports System.Reflection
 
Namespace XlsIO_Sample
 
    Class Program
        Public Shared Sub Main(ByVal args As String())
            'Instantiate the spreadsheet creation engine
            Using excelEngine As ExcelEngine = New ExcelEngine()
 
                Dim application As IApplication = excelEngine.Excel
 
                'Create a workbook
                Dim workbook As IWorkbook = application.Workbooks.Create(1)
                Dim worksheet As IWorksheet = workbook.Worksheets(0)
 
                'Add chart data
                Dim Yvalues As Object() = New Object() {2000, 1000, 1000}
                Dim Xvalues As Object() = New Object() {"Total Income", "Expenses", "Profit"}
 
                'Create chart
                Dim chart As IChartShape = worksheet.Charts.Add()
                chart.ChartTitle = "Original"
 
                'Set positions
                chart.TopRow = 1
                chart.LeftColumn = 1
                chart.RightColumn = 6
                chart.BottomRow = 10
 
                'Set chart type
                Dim serie As IChartSerie = chart.Series.Add(ExcelChartType.Pie)
 
                'Enters the X and Y values directly
                serie.EnteredDirectlyValues = Yvalues
                serie.EnteredDirectlyCategoryLabels = Xvalues
 
                'Copy the existing chart
                Dim chartCopy As IChartShape = CType((TryCast(chart, ChartShapeImpl)).Clone(chart.Parent), IChartShape)
                chartCopy.ChartTitle = "Copied"
 
                'Set positions
                chartCopy.TopRow = 1
                chartCopy.LeftColumn = 8
                chartCopy.RightColumn = 13
                chartCopy.BottomRow = 10
 
                'Add New chart data
                Yvalues = New Object() {3500, 2500, 1000}
                Xvalues = New Object() {"Total Income", "Expenses", "Profit"}
 
                chartCopy.Series(0).EnteredDirectlyValues = Yvalues
                chartCopy.Series(0).EnteredDirectlyCategoryLabels = Xvalues
 
                'Save and close the workbook
                Dim outStream As Stream = File.Create("Output.xlsx")
                workbook.SaveAs(outStream)
            End Using
        End Sub
    End Class
End Namespace
 

 

The below screenshot shows the output of the generated Excel file after inserting the chart in XlsIO.

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied