C# как добавить несколько объектов в слайд Power Point

1) я должен показать текст в верхней центральной позиции слайда

2) чуть ниже текста я должен показать данные в таблице

3) мне нужно создать линейную диаграмму на том же слайде из моих данных, хранящихся в таблице данных.

Я ищу такой выход. здесь я делюсь снимком экрана. введите здесь описание изображения

здесь я поделюсь своим кодом, что я сделал до сих пор.

    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) проблема в том, что я не знаю, как программно добавить свой собственный текст вверху по центру слайда?

2) таким образом я добавил таблицу для слайдов с моими данными. вот код

        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) теперь мне нужно добавить линейную диаграмму на слайд с данными, хранящимися в таблице данных, но я не знаю, как добавить линейную диаграмму на слайд.

поэтому, пожалуйста, помогите мне завершить кодирование.

спасибо


person Mou    schedule 02.02.2017    source источник


Ответы (1)


Вы хотите добавить фигуры к слайдам. Я вижу, где вы создаете фигуры, но они никогда не добавляются. Ниже приведены несколько ранее заданных вопросов о добавлении диаграмм и заголовков. Надеюсь, это поможет и удачи.

Создание линейной диаграммы

Добавление заголовков и изображений

person Musical Beard    schedule 02.02.2017