以编程方式从Excel数据创建[邮件合并] PowerPoint幻灯片

时间:2013-08-07 22:17:22

标签: excel vba powerpoint mailmerge

使用Powerpoint 2010 for Mac。

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

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

2 个答案:

答案 0 :(得分:3)

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

我的第一个建议是使用主视图创建一个powerpoint模板,占位符和标题都可以使用。 然后运行以下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

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

答案 1 :(得分:0)

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

迭代可能是幻灯片和表格行,它们可能是嵌套的。支持图像替换,也在表格单元格中支持。

免责声明:我是开发人员& SlideMight的卖家。