The code examples below describe the process of adding a simple 3D clustered column chart using VSTO. You create a presentation instance, add a default chart to it. Then use Microsoft Excel workbook to access and modify chart data along with setting chart properties. Lastly, save the presentation.

VSTO Example
Using VSTO, the following steps are performed:
  1. Create an instance of a Microsoft PowerPoint presentation.
  2. Add a blank slide to the presentation.
  3. Add a 3D clustered column chart and access it.
  4. Create a new Microsoft Excel Workbook instance and load chart data.
  5. Access the chart data worksheet using Microsoft Excel Workbook instance from workbook.
  6. Set the chart range in the worksheet and remove series 2 and 3 from the chart.
  7. Modify the chart category data in the chart data worksheet.
  8. Modify chart series 1 data in the chart data worksheet.
  9. Now, access the chart title and set the font related properties.
  10. Access the chart value axis and set the major unit, minor units, max value and min values.
  11. Access the chart depth or series axis and remove that as in this example, only one serie is used.
  12. Now, set the chart rotation angles in X and Y direction.
  13. Save the presentation.
  14. Close the instances of Microsoft Excel and PowerPoint.

 //Global Variables
        public static Microsoft.Office.Interop.PowerPoint.Application objPPT;
        public static Microsoft.Office.Interop.PowerPoint.Presentation objPres;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        public static void GEN_VSTO_Chart()

            EnsurePowerPointIsRunning(true, true);

            //Instantiate slide object
            Microsoft.Office.Interop.PowerPoint.Slide objSlide = null;

            //Access the first slide of presentation
            objSlide = objPres.Slides[1];

            //Select firs slide and set its layout
            objSlide.Layout = Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutBlank;

            //Add a default chart in slide
            objSlide.Shapes.AddChart(Microsoft.Office.Core.XlChartType.xl3DColumn, 20F, 30F, 400F, 300F);

            //Access the added chart
            Microsoft.Office.Interop.PowerPoint.Chart ppChart = objSlide.Shapes[1].Chart;

            //Access the chart data
            Microsoft.Office.Interop.PowerPoint.ChartData chartData = ppChart.ChartData;

            //Create instance to Excel workbook to work with chart data
            Microsoft.Office.Interop.Excel.Workbook dataWorkbook = (Microsoft.Office.Interop.Excel.Workbook)chartData.Workbook;

            //Accessing the data worksheet for chart
            Microsoft.Office.Interop.Excel.Worksheet dataSheet = dataWorkbook.Worksheets[1];

            //Setting the range of chart
            Microsoft.Office.Interop.Excel.Range tRange = dataSheet.Cells.get_Range("A1", "B5");

            //Applying the set range on chart data table
            Microsoft.Office.Interop.Excel.ListObject tbl1 = dataSheet.ListObjects["Table1"];

            //Setting values for categories and respective series data

            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A2"))).FormulaR1C1 = "Bikes";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A3"))).FormulaR1C1 = "Accessories";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A4"))).FormulaR1C1 = "Repairs";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("A5"))).FormulaR1C1 = "Clothing";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B2"))).FormulaR1C1 = "1000";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B3"))).FormulaR1C1 = "2500";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B4"))).FormulaR1C1 = "4000";
            ((Microsoft.Office.Interop.Excel.Range)(dataSheet.Cells.get_Range("B5"))).FormulaR1C1 = "3000";

            //Setting chart title
            ppChart.ChartTitle.Font.Italic = true;
            ppChart.ChartTitle.Text = "2007 Sales";
            ppChart.ChartTitle.Font.Size = 18;
            ppChart.ChartTitle.Font.Color = Color.Black.ToArgb();
            ppChart.ChartTitle.Format.Line.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
            ppChart.ChartTitle.Format.Line.ForeColor.RGB = Color.Black.ToArgb();

            //Accessing Chart value axis
            Microsoft.Office.Interop.PowerPoint.Axis valaxis = ppChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlValue, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

            //Setting values axis units
            valaxis.MajorUnit = 2000.0F;
            valaxis.MinorUnit = 1000.0F;
            valaxis.MinimumScale = 0.0F;
            valaxis.MaximumScale = 4000.0F;

            //Accessing Chart Depth axis
            Microsoft.Office.Interop.PowerPoint.Axis Depthaxis = ppChart.Axes(Microsoft.Office.Interop.PowerPoint.XlAxisType.xlSeriesAxis, Microsoft.Office.Interop.PowerPoint.XlAxisGroup.xlPrimary);

            //Setting chart rotation
            ppChart.Rotation = 20; //Y-Value
            ppChart.Elevation = 15; //X-Value
            ppChart.RightAngleAxes = false;

            // Save the presentation as a PPTX
            objPres.SaveAs("VSTOSampleChart", Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
            //Close Workbook and presentation


        //Supplementary methods
        public static void StartPowerPoint()
            objPPT = new Microsoft.Office.Interop.PowerPoint.Application();
            objPPT.Visible = MsoTriState.msoTrue;
            //  objPPT.WindowState = PowerPoint.PpWindowState.ppWindowMaximized

        public static void EnsurePowerPointIsRunning(bool blnAddPresentation)
            EnsurePowerPointIsRunning(blnAddPresentation, false);

        public static void EnsurePowerPointIsRunning()
            EnsurePowerPointIsRunning(false, false);

        public static void EnsurePowerPointIsRunning(bool blnAddPresentation, bool blnAddSlide)
            string strName = null;
            //Try accessing the name property. If it causes an exception then 
            //start a new instance of PowerPoint
                strName = objPPT.Name;
            catch (Exception ex)
            //blnAddPresentation is used to ensure there is a presentation loaded
            if (blnAddPresentation == true)
                    strName = objPres.Name;
                catch (Exception ex)
                    objPres = objPPT.Presentations.Add(MsoTriState.msoTrue);
            //BlnAddSlide is used to ensure there is at least one slide in the 
            if (blnAddSlide)
                    strName = objPres.Slides[1].Name;
                catch (Exception ex)
                    Microsoft.Office.Interop.PowerPoint.Slide objSlide = null;
                    Microsoft.Office.Interop.PowerPoint.CustomLayout objCustomLayout = null;
                    objCustomLayout = objPres.SlideMaster.CustomLayouts[1];
                    objSlide = objPres.Slides.AddSlide(1, objCustomLayout);
                    objSlide.Layout = Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText;
                    objCustomLayout = null;
                    objSlide = null;

Aspose.Slides for .NET Example

Using Aspose.Slides for .NET, the following steps are performed:
  1. Create an instance of a Microsoft PowerPoint presentation.
  2. Add a blank slide to the presentation.
  3. Add a 3D clustered column chart and access that.
  4. Access the chart data worksheet using a Microsoft Excel Workbook instance from workbook.
  5. Remove unused series 2 and 3.
  6. Access chart categories and modify the labels.
  7. Acces series 1 and modify the series values.
  8. Now, access the chart title and set the font properties.
  9. Access the chart value axis and set the major unit, minor units, max value and min values.
  10. Now, set the chart rotation angles in X and Y direction.
  11. Save the presentation to PPTX format.

public static void GEN_ASPOSE_Chart()
            //Create empty presentation
            using (PresentationEx pres = new PresentationEx())

                //Accessing first slide
                SlideEx slide = pres.Slides[0];

                //Addding default chart
                ChartEx ppChart = slide.Shapes.AddChart(ChartTypeEx.ClusteredColumn3D, 20F, 30F, 400F, 300F);

                //Getting Chart data
                ChartDataEx chartData = ppChart.ChartData;

                //Removing Extra default series

                //Modifying chart categories names
                chartData.Categories[0].ChartDataCell.Value = "Bikes";
                chartData.Categories[1].ChartDataCell.Value = "Accessories";
                chartData.Categories[2].ChartDataCell.Value = "Repairs";
                chartData.Categories[3].ChartDataCell.Value = "Clothing";

                //Modifying chart series values for first category
                chartData.Series[0].Values[0].Value = 1000;
                chartData.Series[0].Values[1].Value = 2500;
                chartData.Series[0].Values[2].Value = 4000;
                chartData.Series[0].Values[3].Value = 3000;

                //Setting Chart title
                ppChart.HasTitle = true;
                ppChart.ChartTitle.Text.Text = "2007 Sales";
                PortionFormatEx format = ppChart.ChartTitle.Text.Paragraphs[0].Portions[0].PortionFormat;
                format.FontItalic = NullableBool.True;
                format.FontHeight = 18;
                format.FillFormat.FillType = FillTypeEx.Solid;
                format.FillFormat.SolidFillColor.Color = Color.Black;

                //Setting Axis values
                ppChart.ValueAxis.IsAutomaticMaxValue = false;
                ppChart.ValueAxis.IsAutomaticMinValue = false;
                ppChart.ValueAxis.IsAutomaticMajorUnit = false;
                ppChart.ValueAxis.IsAutomaticMinorUnit = false;

                ppChart.ValueAxis.MaxValue = 4000.0F;
                ppChart.ValueAxis.MinValue = 0.0F;
                ppChart.ValueAxis.MajorUnit = 2000.0F;
                ppChart.ValueAxis.MinorUnit = 1000.0F;
                ppChart.ValueAxis.TickLabelPosition = TickLabelPositionType.NextTo;

                //Setting Chart rotation
                ppChart.Rotation3D.RotationX = 15;
                ppChart.Rotation3D.RotationY = 20;

                //Saving Presentation


Last edited Jan 1, 2014 at 6:25 AM by asposemarketplace, version 2