是否可以使用新数据(在C#中)更新PowerPoint幻灯片?

是否有关于如何更新PowerPoint幻灯片的示例(通过清除某个文本框中的文本并使用新内容更新它)?

我有一份月度报告,可以在PowerPoint中生成,我拥有数据库中的所有数据。 我试图通过使用带有三个文本框的空白PowerPoint模板来确定是否可以简单地自动生成幻灯片,并且数据将从我的C#代码中填充。

我想寻找的其他例子是:

  • 弹出列表

任何正确方向的帮助将不胜感激。 我在SOF上看到几个相似的问题,但似乎没有人回答这个问题。

我认为最简单的方法是使用OpenXML格式(.pptx),因为我在一台可能没有机器上的PowerPoint的Web服务器上运行。

是的,这是可能的, 这是一个关于如何在线进行的教程。 他们还有该博客中项目的示例代码应该有所帮助。

抱歉真的迟到了,希望你还在寻找这个。 请注意,这不使用SDK – 它只使用System.IO.Packaging和Linq(和XML Literals)。 无论如何,这是做什么的:

  1. 创建演示文稿。 在幻灯片3上,添加4个文本框。
  2. 将文本放入其中三个并将其命名为“Sample1”,“Sample2”和“Sample3”。
  3. 在最后一个文本框中,放置两行文本,然后使这些行成为子弹点。 将其命名为“ListSample1”。

这就是你所需要的一切。 然后保存文件并记下路径,并更改下面的filePath变量以反映您的演示文稿的路径。

在控制台应用中运行以下内容:

 Imports System.IO Imports System.IO.Packaging ''# Add reference to WindowsBase for this Imports  Imports  Imports  Module Module1 Public Const documentRelationshipType As String = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Sub Main() Dim slide, document As XElement Dim pptPackage As Package = Nothing Dim slidePart, documentPart As PackagePart Dim filePath As String = "C:\Users\Me\Documents\visual studio 2010\Projects\FillPowerPoint\FillPowerPoint\sample.pptx" pptPackage = Package.Open(filePath, FileMode.Open, FileAccess.ReadWrite) Using pptPackage Dim documentRelationship As PackageRelationship = pptPackage.GetRelationshipsByType(documentRelationshipType).FirstOrDefault Dim documentUri As Uri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), documentRelationship.TargetUri) documentPart = pptPackage.GetPart(documentUri) document = XElement.Load(New StreamReader(documentPart.GetStream)) Dim slideList = From e In document.. Dim slideIndex As Integer = 3 ''# this is the slide number we want, 1-based Dim slideReference As String = slideList(slideIndex - 1).@r:id.ToString slidePart = pptPackage.GetPart(PackUriHelper.ResolvePartUri(documentPart.Uri, documentPart.GetRelationship(slideReference).TargetUri)) slide = XElement.Load(New StreamReader(slidePart.GetStream)) ''# Replace just text value in Sample1 textbox Dim Sample1 = From e In slide... Where e...@name = "Sample1" Select e.....SingleOrDefault Sample1.Value = "new text in sample 1" ''# Replace text and make bold inn Sample2 textbox Dim Sample2 = From e In slide... Where e...@name = "Sample2" Select e....SingleOrDefault Sample2..SingleOrDefault.Add(New XAttribute("b", 1)) Sample2..SingleOrDefault.Value = "new bold text in sample 2" ''# Replace text and make bold inn Sample2 textbox Dim Sample3 = From e In slide... Where e...@name = "Sample3" Select e..SingleOrDefault Sample3..Remove() Dim newParagraphs As XElement =     Sample3      With a new paragraph     Sample3.SingleOrDefault.Add(newParagraphs.Elements) ''# Create a new list of bullets Dim s() As String = {"Bullet 1", "Bullet 2", "Bullet 3"} Dim ListSample1 = From e In slide... Where e...@name = "ListSample1" Select e..SingleOrDefault ListSample1..Remove() ListSample1.SingleOrDefault.Add(From e In s Select        <%= e %>  ) slide.Save(slidePart.GetStream) End Using End Sub End Module 

对不起,我知道这非常重视VB和XML Literals,但C#应该可以通过一些转换工作做同样的事情。

您可能希望查看Office Automation API。 将允许您以编程方式修改,创建等powerpoint文档。

本文档适用于较旧版本的powerpoint,但相同的过程适用于较新版本。 http://support.microsoft.com/default.aspx?scid=kb;EN-US;303718

但是,如果您确实使用办公室自动化API,请确保使用您在c#中创建的此工具支持最低版本的办公室。