【问题标题】:Programmatically create [Mail Merge] PowerPoint slides from Excel data以编程方式从 Excel 数据创建 [邮件合并] PowerPoint 幻灯片
【发布时间】:2013-08-07 22:17:21
【问题描述】:

使用适用于 Mac 的 Powerpoint 2010。

我有一个需要每周创建 100 张幻灯片的演示文稿。每张幻灯片都有一个相同的模板。每张幻灯片上的元素由 5 个文本字段和一张图片组成,每张幻灯片对应于 Excel 表格中的数据列。

谁能指出我如何循环遍历此 Excel 文件的行并以编程方式创建这些幻灯片的代码示例或详细演练?

【问题讨论】:

  • 有 PPT 2011 for Mac 或 2010 for PC。如果您确实有 PC 版本,那么在我的 PowerPoint 常见问题解答网站(www.pptfaq.com 并搜索名称“Naresh”上,有几个自动化 Excel 和将数据检索到 PowerPoint 的示例……他是写得最多的人的好东西)。对于预制的商业解决方案,我出售了一个 Merge 插件,pptools.com/merge ... 那里提供免费的全功能演示。如果您有 2011,PPTFAQ 上的代码可能适用于 Mac。

标签: excel vba powerpoint mailmerge


【解决方案1】:

这绝对是可能的,而且很有趣:-)

我的第一个建议是使用主视图创建一个PPT模板,占位符和标题都准备好了。 然后运行以下 powerpoint 宏,以便您可以获取页面上每个形状的名称和索引/id。

Sub nameshapes()

Dim sld As Slide
Dim shp As Shape
Set sld = Application.ActivePresentation.Slides(1)

For Each shp In sld.Shapes
    shp.TextEffect.Text = shp.name & " " & shp.ID
Next
End Sub

这是一段快速而肮脏的代码,它将模板页面上每个项目的索引和名称放入形状本身。记忆,记录这些。这些是您想要的东西去哪里的参考点。 我不打算介绍循环等的基础知识,而是介绍关键代码。

1) 从 excel 打开并获得对 powerpoint 的控制。

Set ppt = CreateObject("PowerPoint.Application")
ppt.Visible = True
Set myPPT = ppt.Presentations.add
myPPT.ApplyTemplate ("Your template here.potx")

然后我添加我需要的所有页面,(这可能因您的应用程序和行数而异,以及您是在开始时还是在过程中执行此操作,取决于您是否已映射您应该将数据放在哪个页面上,在您的数据中)

For x = 1 To NumberOfPages
    myPPT.Slides.AddSlide x, myPPT.SlideMaster.CustomLayouts(2) '2 is the index of the template I wish to use (in master views, the index is the order they're in (starting from 1)
Next

我假设您知道要在每一行更新哪个页面,所以:

For Each dr In .rows  'I'm storing my data in a special collection, you will need to adapt this
    Set currSlide = myPPT.Slides(dr.cell("OutputPage").Value) 'go to the right page
    Sheets(dr.cell("SheetName").toString).Activate 'make sure the data you want is active
    ActiveSheet.Range(Names(dr.cell("ChartID").Value)).CopyPicture 'copy the table as a picture, this is easiest for formatting in powerpoint, but you can do lots of things here
    currSlide.Select
    currSlide.Shapes("Content Placeholder " & dr.cell("Output Position").toString).Select 'the output position is the index from the first bit of code,
    ppt.ActiveWindow.View.Paste
next

现在,您的应用程序肯定会有所不同,但我希望所有基本必需品都在那里,这应该是一个很好的起点。

【讨论】:

  • 罗文,老实说我有点困惑。你有示例 PPT 和 XLS 启用宏的文件可以指点我吗?
  • 我试过在这里写一个更详细的版本:excelman.net/archives/79
【解决方案2】:

独立应用程序SlideMight 接受 PowerPoint 模板、JSON 数据文件和配置,并将这些合并到演示文稿中。

迭代可以在幻灯片和表格行上进行,并且可以嵌套。支持图像替换,表格单元格中也是如此。

免责声明:我是 SlideMight 的开发商和销售商。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多