[英]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.