简体   繁体   中英

c# how to add multiple objects in power point slide

1) i have to show a text at top center position of slide

2) just below text i have to show data in table

3) i have to generate line chart in same slide from my data stored in datatable.

i am looking for this kind of output. here i am sharing a screen shot. 在此处输入图片说明

here i will share my code what i have done so far.

    pptNS.ApplicationClass powerpointApplication = null;
    pptNS.Presentation pptPresentation = null;
    pptNS.Slide pptSlide = null;
    pptNS.ShapeRange shapeRange = null;
    pptNS.Shape oShape = null;

    xlNS.ApplicationClass excelApplication = null;
    xlNS.Workbook excelWorkBook = null;
    xlNS.Worksheet targetSheet = null;
    xlNS.ChartObjects chartObjects = null;
    xlNS.ChartObject existingChartObject = null;
    xlNS.Range destRange = null;

    string paramPresentationPath = @"D:\test\Chart Slide.pptx";
    string paramWorkbookPath = @"D:\test\NPS.xlsx";
    object paramMissing = Type.Missing;


    try
    {
        // Create an instance of PowerPoint.
        powerpointApplication = new pptNS.ApplicationClass();

        // Create an instance Excel.          
        excelApplication = new xlNS.ApplicationClass();

        // Open the Excel workbook containing the worksheet with the chart
        // data.
        excelWorkBook = excelApplication.Workbooks.Open(paramWorkbookPath,
                        paramMissing, paramMissing, paramMissing,
                        paramMissing, paramMissing, paramMissing,
                        paramMissing, paramMissing, paramMissing,
                        paramMissing, paramMissing, paramMissing,
                        paramMissing, paramMissing);

        // Get the worksheet that contains the chart.
        targetSheet =
            (xlNS.Worksheet)(excelWorkBook.Worksheets["Spain"]);

        // Get the ChartObjects collection for the sheet.
        chartObjects =
            (xlNS.ChartObjects)(targetSheet.ChartObjects(paramMissing));



        // Create a PowerPoint presentation.
        pptPresentation = powerpointApplication.Presentations.Add(
                            Microsoft.Office.Core.MsoTriState.msoTrue);

        // Add a blank slide to the presentation.
        pptSlide =
            pptPresentation.Slides.Add(1, pptNS.PpSlideLayout.ppLayoutBlank);

        // capture range
        //var writeRange = targetSheet.Range["A1:B15"];
        destRange = targetSheet.get_Range("A1:B15");

        System.Array myvalues = (System.Array)destRange.Cells.Value;
        List<Tuple<string, string>> cellData = ConvertToStringArray(myvalues);

        int iRows = cellData.Count;
        int iColumns = 2;
        int row = 1;

        oShape = pptSlide.Shapes.AddTable(iRows, iColumns, 500, 110, 160, 120);

        foreach (Tuple<string, string> item in cellData)
        {
            string strdate = item.Item1;
            string strValue = item.Item2;

            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Text = strdate;
            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Font.Name = "Verdana";
            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Font.Size = 8;
            oShape.Table.Cell(row, 1).Shape.Fill.BackColor.RGB = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb(); 
            oShape.Table.Cell(row, 1).Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;

            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Text = (strValue.StartsWith("0") ?  "0%" : (strValue + "0%"));
            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Font.Name = "Verdana";
            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Font.Size = 8;


            row++;
        }

        oShape.Top = 10;
        oShape.Left =10;

        //copy range
        //destRange.Copy();

        // Paste the chart into the PowerPoint presentation.
        //shapeRange = pptSlide.Shapes.Paste();

        //var table = pptSlide.Shapes.AddTable();
        // Position the chart on the slide.
        //shapeRange.Left = 60;
        //shapeRange.Top = 100;

        // Get or capture the chart to copy.
        //existingChartObject = (xlNS.ChartObject)(chartObjects.Item(1));


        // Copy the chart from the Excel worksheet to the clipboard.
        //existingChartObject.Copy();

        // Paste the chart into the PowerPoint presentation.
        //shapeRange = pptSlide.Shapes.Paste();
        //Position the chart on the slide.
        //shapeRange.Left = 90;
        //shapeRange.Top = 100;

        // Save the presentation.
        pptPresentation.SaveAs(paramPresentationPath,
                        pptNS.PpSaveAsFileType.ppSaveAsOpenXMLPresentation,
                        Microsoft.Office.Core.MsoTriState.msoTrue);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
        // Release the PowerPoint slide object.
        shapeRange = null;
        pptSlide = null;

        // Close and release the Presentation object.
        if (pptPresentation != null)
        {
            pptPresentation.Close();
            pptPresentation = null;
        }

        // Quit PowerPoint and release the ApplicationClass object.
        if (powerpointApplication != null)
        {
            powerpointApplication.Quit();
            powerpointApplication = null;
        }

        // Release the Excel objects.
        targetSheet = null;
        chartObjects = null;
        existingChartObject = null;

        // Close and release the Excel Workbook object.
        if (excelWorkBook != null)
        {
            excelWorkBook.Close(false, paramMissing, paramMissing);
            excelWorkBook = null;
        }

        // Quit Excel and release the ApplicationClass object.
        if (excelApplication != null)
        {
            excelApplication.Quit();
            excelApplication = null;
        }

        GC.Collect();
        GC.WaitForPendingFinalizers();

    }
}

1) the problem is i do not know how could i add my own text at top center of the slide programmatically?

2) this way i added a table to slide with my data. here is the code

        List<Tuple<string, string>> cellData = ConvertToStringArray(myvalues);

        int iRows = cellData.Count;
        int iColumns = 2;
        int row = 1;

        oShape = pptSlide.Shapes.AddTable(iRows, iColumns, 500, 110, 160, 120);

        foreach (Tuple<string, string> item in cellData)
        {
            string strdate = item.Item1;
            string strValue = item.Item2;

            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Text = strdate;
            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Font.Name = "Verdana";
            oShape.Table.Cell(row, 1).Shape.TextFrame.TextRange.Font.Size = 8;
            oShape.Table.Cell(row, 1).Shape.Fill.BackColor.RGB = System.Drawing.Color.FromArgb(255, 0, 0).ToArgb(); 
            oShape.Table.Cell(row, 1).Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;

            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Text = (strValue.StartsWith("0") ?  "0%" : (strValue + "0%"));
            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Font.Name = "Verdana";
            oShape.Table.Cell(row, 2).Shape.TextFrame.TextRange.Font.Size = 8;


            row++;
        }

        oShape.Top = 10;
        oShape.Left =10;

3) now i have to add line chart to my slide with data stored in data table but i do not know how to add line chart to my slide.

so please some one help me to complete my coding.

thanks

You're looking to add shapes to the slides. I see where you create shapes but they are never added. Below are a few questions previously asked about adding charts and titles. Hope it helps and best of luck.

Creating Line Chart

Adding Titles and Images

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM