简体   繁体   English

C#:如何将Excel单元格范围和图表数据复制到Powerpoint幻灯片

[英]C#: How to copy excel cell range and chart data to power point slides

I have data and chart in Excel Worksheet which I need to copy at run time from Excel to power point slides. 我在Excel工作表中有数据和图表,我需要在运行时将它们从Excel复制到PowerPoint幻灯片。

I have a code which is working fine but the code only can copy chart data to excel sheet not range data. 我有一个工作正常的代码,但是该代码只能将图表数据复制到Excel工作表,而不能将范围数据复制到Excel工作表。

Please see the scree shot of my Excel. 请查看我的Excel的碎石镜头。 So anyone has an idea how data is there in my work sheet which i need to copy to PowerPoint slide programmatically. 因此,任何人都知道我的工作表中的数据的方式,我需要以编程方式将其复制到PowerPoint幻灯片。 在此处输入图片说明

Here is code which I am using to copy range data and chart data to PowerPoint dynamically. 这是我用来将范围数据和图表数据动态复制到PowerPoint的代码。

private void Form1_Load(object sender, EventArgs e)
{
    pptNS.ApplicationClass powerpointApplication = null;
    pptNS.Presentation pptPresentation = null;
    pptNS.Slide pptSlide = null;
    pptNS.ShapeRange shapeRange = 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\MyExcelData.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");
        //copy range
        destRange.Copy();

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


        // 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();

    }
}

Please see my code and let me know what to rectify in my code as a result cell range and chart both i can copy to power point slides. 请查看我的代码,并让我知道要在我的代码中纠正哪些内容,结果单元格范围和图表都可以复制到Powerpoint幻灯片。

I doubt it's as simple as copy-paste . 我怀疑它像复制粘贴一样简单。 You'll probably need to create a table in the PowerPoint slide first and set the table values to the Value of the Range into the table. 您可能需要先在PowerPoint幻灯片中创建一个表,然后将表值设置为该表中的Range Value I'm not familiar with the PowerPoint interop, but it would probably look something like: 我对PowerPoint互操作熟悉,但可能看起来像这样:

var table = pptSlide.Shapes.AddTable();
destRange = targetSheet.get_Range("A1:B15");
for (int i = 1; i <= destRange.Rows; i++) 
{ 
    for (int j = 1; j <= destRange.Columns; j++) 
    {
        table.Table.Cell(i, j).Shape.TextFrame.TextRange.Text =destRange[i, j].Text;
    } 
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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