Программное создание [Mail Merge] слайдов PowerPoint из данных Excel

Использование Powerpoint 2010 для Mac.

У меня есть презентация из 100 слайдов, которую нужно создавать еженедельно. Каждый слайд имеет идентичный шаблон. Элементы на каждом слайде состоят из 5 текстовых полей и изображения, каждый слайд соответствует столбцу данных в таблице Excel.

Может ли кто-нибудь указать мне пример кода или подробное пошаговое руководство о том, как я могу перебирать строки этого файла Excel и программно создавать эти слайды?


person Nikhil Goel    schedule 07.08.2013    source источник
comment
Есть PPT 2011 для Mac или 2010 для ПК. Если у вас действительно есть версия для ПК, на моем сайте часто задаваемых вопросов о PowerPoint (www.pptfaq.com) есть несколько примеров автоматизации Excel и извлечения данных в PowerPoint (www.pptfaq.com и поиск по имени Нареш... он тот человек, который написал большую часть хорошая вещь). В качестве готового коммерческого решения я продаю надстройку Merge, pptools.com/merge. ... бесплатная полнофункциональная демо-версия доступна там. Код на PPTFAQ может быть адаптирован для Mac, если у вас 2011.   -  person Steve Rindsberg    schedule 08.08.2013


Ответы (2)


Это определенно возможно, и довольно весело :-)

Моя первая рекомендация — создать шаблон PowerPoint, используя основные виды, с заполнителями и заголовками, готовыми к работе. Затем запустите следующий макрос PowerPoint, чтобы получить имя и индекс/идентификатор для каждой фигуры на странице.

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) Откройте и получите контроль над Power Point из Excel.

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

Теперь ваше приложение определенно будет отличаться от этого, но я надеюсь, что все основные потребности есть, и это должно быть хорошей отправной точкой.

person RowanC    schedule 08.08.2013
comment
Роуэн, если честно, я немного запутался. У вас есть примеры файлов с поддержкой макросов PPT и XLS, на которые вы можете мне указать? - person Nikhil Goel; 11.08.2013
comment
Я попытался написать более подробную версию здесь: excelman.net/archives/79 - person RowanC; 12.08.2013

Автономное приложение SlideMight принимает шаблон PowerPoint, файл данных JSON и конфигурацию и объединяет их в презентацию. .

Итерации могут выполняться по слайдам и по строкам таблицы, а также могут быть вложенными. Замена изображения поддерживается, в том числе в ячейках таблицы.

Отказ от ответственности: я разработчик и продавец SlideMight.

person André van Delft    schedule 05.03.2017