Показать полную графическую версию : PowerPoint автоматическое создание слайдов
morebeauty
05-05-2014, 08:08
На телевизоре крутятся презентации и видео. В том числе есть презентация с днями рождения сотрудников на неделю. Если честно это очень надоедает. Хотелось бы, чтобы запускался первый титульный слайд, а он бы уже формировал все последующие в зависимости от даты и вставлял нужную фото из папки. Даже не знаю с какой стороны к этому подойти. Ну, точнее понимаю что нужно через VBA, но все, что я могу сделать на VB - это написать какую-либо функцию или процедуру без взаимодействия с элементами презентации
morebeauty, Начало работы с языком VBA в ПО PowerPoint 2010 (машинный перевод) (http://msdn.microsoft.com/ru-ru/library/office/ee814734(v=office.14).aspx) В меру подробно, с примерами.
Я считаю -- то, что надо.
morebeauty
05-05-2014, 10:55
lxa85, спасибо, почитаю, как будет время, но все же я хотел немного иного ответа. Задача разовая. Понадобится ли когда-нибудь в дальнейшем использовать ВБА в поверпоинте - неизвестно. Посему хотелось бы конкретики. Ну, задачу ведь я обрисовал, хотелось бы список того, что мне понадобится и ссылки на хелп именно по этому списку, а не "программирование от А до Я" :)
morebeauty, хе. :)
Давай тогда начнем с того, что "обрисованная задача" имеет достаточно расплывчатое представление.
Как я понял, формировать титульный слайд, как первооснову, руками -- это кака и бе-бе-бе.
Ладно, допустим сотрудник взял на себя труд и его сформировал. Тогда циклом выдираем ФИО, и через некий разделитель (допустим запятую) вытаскиваем дату.
Из этого формируем новый слайд. Как автоматически привязать к слайду картинку -- не знаю.
Другое дело, если будет некая база (хоть текстовый файл), в котором будет указано, где ФИО, где дата рождения, (от сих на будущее можно посчитать юбилеи), и картинка фона + портрет (+ вариант шаблона оформления).
Ну и из практики -- все равно придется проверять "руками". Т.к. у людей бывают очень длинные имена, фамилии и отчества. Т.е. надо будет проследить, чтобы слайд не рассыпался и(или) было применено правильно растяжение по шрифту.
PP и VBA у меня под руками нет, поэтому пока только теория.
Т.е. хотелось бы знать, с какими именно объектами придется работать. Т.к. список сотрудников может быть выражен как текстовым полем, так и таблицей.
--
Понадобятся:
Работа с файлами (загрузка картинок), работа с объектом типа рисунок. (тыц (http://www.techrepublic.com/blog/microsoft-office/use-vba-to-insert-a-picture-file-onto-a-powerpoint-slide/))
Объект типа текстовое поле. (Координаты, символы форматирования, характеристики текста (растяжение по ширине, выравнивание по левому / правому краю / по центру)), (тыц (http://msdn.microsoft.com/en-us/library/bb265972(v=office.12).aspx), тыц (http://msdn.microsoft.com/en-us/library/bb265517(v=office.12).aspx))
Работа с фоном.(тыц (http://msdn.microsoft.com/en-us/library/bb265788(v=office.12).aspx))
Работа с объектом типа заголовок. (тыц (http://msdn.microsoft.com/en-us/library/bb265794(v=office.12).aspx))
Создание нового слайда.(тыц (http://msdn.microsoft.com/en-us/library/bb251664(v=office.12).aspx))
Общая справка: Все объекты и работа с каждым (http://msdn.microsoft.com/ru-ru/library/bb265987.aspx)
morebeauty
05-05-2014, 12:04
lxa85, почти все что нужно. :)
Как я понял, формировать титульный слайд, как первооснову, руками -- это кака и бе-бе-бе. »Как раз таки нет. Сформировать один шаблон слайда можно и ручками. Только для удобства нужно предусмотреть именно работу с шаблонами, потому что каждый месяц шаблон будет разный. То есть всего 12 шаблонов, которые в зависимости от месяца нужно подставлять к слайду.
Но кроме этого должен быть еще заголовочный слайд, типа "на этой неделе у следующих людей дни рождения".
И вот пока он висит, должны формироваться следующие несколько слайдов по количеству именинников на этой неделе. Про обработку событий я ничего не нашел, походу все макросы нужно запускать вручную :(
Так как ресурсами комп, который это вещает, не богат, формировать каждый раз слайды не хотелось бы. То есть первый раз формируются и презентация сохраняется, потом только проверяется на соответствие дате. Если неделя новая, то все слайды (кроме первого, на котором меняется дата и стишок :) ), удаляются и формируются новые. Короче как то так.
И самое главное, презентация сохранена в формате "демонстрация", то есть при запуске открывается не конструктор, а сразу начинается показ слайдов.
Сотрудник приходит, формирует первый слайд в конструкторе, запускает макрос, получает остальные n'цать штук, проверяет, сохраняет как "демонстрацию" и отправляет на показ мультиков. Не вижу криминала.
Слайды формируются в рабочем черновике. Никаких генераций "на лету" во время просмотра. Забыть как страшный сон.
Навешивать обработчики событий ... да нет, бред. Это же презентация, а не флеш игра с интерактивным взаимодействием и ветвлением событий.
И самое главное, презентация сохранена в формате "демонстрация", то есть при запуске открывается не конструктор, а сразу начинается показ слайдов. »
Само собой. :)
morebeauty
06-05-2014, 04:57
Тогда я усложню задачу. Есть презентация с набором шаблонов и одной лишь пользовательской формой, в которой я устанавливаю опции, типа выбора эффектов, временные настройки и другие. Еще в него вшиты 12 шаблонов оформления (на каждый месяц). Далее по нажатию кнопочки должна создаться презентация на основе всего выбранного. То есть к уже предложенным инструкциям еще нужны:
создание новой презентации;
перенос настроек (шаблонов, коллекций и хз чего еще) в новую презентацию из имеющейся.
Само собой, если это возможно.
И еще. Файл с именами сотрудников и датами рождения в формате excel. Можно ли оттуда сдернуть данные? Или лучше сохранить в тексте?
morebeauty, не наглей! :)
Применение шаблонов: тыц (http://msdn.microsoft.com/en-us/library/bb251340(v=office.12).aspx)
Работа с Excel: как сделать ... (http://msdn.microsoft.com/en-us/library/bb257110(v=office.12).aspx)
Пример работы с ячейками тыц (http://msdn.microsoft.com/en-us/library/bb211396(v=office.12).aspx)
Коллекции и "хз чего еще" требует уточнения.
----
Есть презентация с набором шаблонов и одной лишь пользовательской формой, в которой я устанавливаю опции, типа выбора эффектов, временные настройки и другие. Еще в него вшиты 12 шаблонов оформления (на каждый месяц). Далее по нажатию кнопочки должна создаться презентация на основе всего выбранного. »
Что, совсем на работе скучно? :)
Лучшее враг хорошего, не рой себе яму. Проще -- лучше. Лежат тихо мирно 12 файлов с презентациями по месяцам и пусть лежат. Кто захотел -- поправил.
Не, сделать то можно, почувствовать за себя гордость, мол "во как могу!", боком вылезет, помяни мое слово!
morebeauty
06-05-2014, 09:45
не наглей! »
Не наглею. Гуглить умею, вот только так и не смог найти ответ на интересующий вопрос про будущие подводные камни.
Открываю документ так
Dim exlApp As Object, exlDoc As Object
Set exlApp = CreateObject("Excel.Application")
Set exlDoc = exlApp.Workbooks.Open("C:\Users\...\workers.xlsx")
И вот тут мне не понятны следующие вещи:
зачем мне нужен объект exlDoc, если к ячейкам я обращаюсь через exlApp? А что, если exlApp рано или поздно обратится к другому открытому документу на компе? Ведь exlApp.Cells(x,y) обращается к ячейке в exlApp.ActiveWorkbook. А значит я могу открыть документ на компе в момент работы макроса и он станет активным. Или это невозможно? Почему? В общем этот момент мне не понятен, поэтому я боюсь что он рано или поздно меня подведет.
Что, совсем на работе скучно? »
Я очень ленивый, я могу месяц работать над автоматизацией своей повседневной работы, чтобы потом целый год сидеть и ничего не делать. Вот и сейчас, хотел посмотреть фильм, а тут снова нужно делать эту презентацию :)
Лучшее враг хорошего, не рой себе яму. Проще -- лучше. Лежат тихо мирно 12 файлов с презентациями по месяцам и пусть лежат. Кто захотел -- поправил.
Не, сделать то можно, почувствовать за себя гордость, мол "во как могу!", боком вылезет, помяни мое слово! »
Никто за меня это не подправит, если вся работа не будет выполняться нажатием одной единственной кнопки "Выполнить всю работу за меня". Если сумею этого добиться, скину дни рождения на секретаршу. Ну да, по началу будет дергать меня с места из-за глюков в коде, но со временем все устаканится :)
morebeauty, я не силен в VBA, но где то ошибка в логике.
Ты открываешь документ (open), читаешь из него необходимые данные, и закрываешь его. Всё. Работа с Excel закончилась.
ActiveWorkbook будет рассматриваться в том случае, если макрос выполняется из экселя.
Т.е. одно дело мы вытаскиваем из xlsx данные о сотрудниках извне, например из PowerPoint.
Другое дело, когда у нас открыт Excel и нам надо выполнить макрос на текущей странице.
По идее так. По практике подсказать не смогу, я под linux сижу. Тянуться до VBA далеко.
зачем мне нужен объект exlDoc, если к ячейкам я обращаюсь через exlApp? »
А Вы не обращайтесь. Работайте с Range нормально, через Excel → Workbook → Worksheet → Range.
Я делал N лет назад подобную штуку (вроде до сих пор работает) - показывать погоду из интернета по телевизору (Это частный случай; в общем случае генерил контент для кабельного канала).
вопрос про будущие подводные камни. »
Проблемы
№1: "Нажмите ESC чтобы закрыть презентацию". Решается предварительной установкой галочки в PP
№2: "Не запущу скрипты, т.к. опасно". Скрипты запускаются через wscript, генерят презентации без скриптов. В таком варианте работает
№3: "Не могу сгенерить контент (недоступен интернет)". Посылаем сообщение админу, показываем разные цветочки на экране
№4: "Юзверь". Вообще мне попались умные девочки (которые настраивали презентации). Но и правило я придумал несложное: использование "тегов", т.е. ключевых слов на русском языке в угловых скобках.
№5: "Race condition". Нельзя правиль презентацию в той папке, откуда идёт показ. Лучше туда копировать уже поправленное. А перед показом копировать презентацию в недоступное извне место.
Вообще этот подход себя порошо показал (просто, быстро, надёжно). Главная заноза - правообладатели.
morebeauty
07-05-2014, 09:32
Не могу найти еще кое что. Нужна помощь.
Все объекты (заголовок, текст, картинка) уже вшиты в макет для удобства.
Меняю заголовок так:
curSlide.Shapes.Title.TextFrame.TextRange = "Заголовок"
текст так:
curSlide.Shapes(2).TextFrame.TextRange = "Текст"
а вот с картинкой беда. Создать ее программно с нуля можно, но хотелось бы иметь возможность обратиться к уже созданному объекту.
Если делаю так:
curSlide.Shapes(1).Fill.UserPicture "...Pic.jpg"
то просто внутрь шейпа вставляется картинка как фон. То есть даже остается текст, видимый в режиме конструктора (вставить рисунок) и в центре шейпа так и остается пиктограмма, по щелчку на которую можно вставить рисунок.
А мне нужен код, симулирующий нажатие на эту пиктограмму (минуя диалог выбора файла). Когда я вставляю рисунок таким образом (по пиктограмме), он не растягивается и не сжимается, он обрезается и встает центром в мой шейп. То есть в меню обрезки после этого я могу как надо его подвинуть.
К сожалению записи макросов в 2010 офисе нет. В 2007 тоже. Ставить 2003 ради этого не хочется, муторно это. Помогите если сможете.
Гуголь написал много томов...
http://msdn.microsoft.com/en-us/library/office/ff745953%28v=office.15%29.aspx
http://support.microsoft.com/KB/168649
morebeauty
08-05-2014, 06:17
Гуголь написал много томов... »
Много, и ничего по моему вопросу.
Shapes.AddPicture не для моего случая. Я могу и ошибаться, но запустите powerpoint и сделайте то что я сейчас напишу, тогда вы поймете, чего я хочу (с учетом что у вас офис версии не ниже 2007).
1. Создайте новую презентацию
2. В первом слайде, который создастся автоматически, выберите дефолтный макет, в котором уже есть шейп для рисунка.
3. Щелкните по пиктограмме рисунка и в проводнике выберите рисунок, по размеру превышающий рамку. При этом вы увидите, что рисунок вставился в заполнитель и пиктограмма с рисунком пропала. Думаете, в этот момент выполнилось Shapes.AddPicture? Очень сомневаюсь. В заполнитель вставилась картинка. Если теперь выделить картинку и нажать Del (удалить), то заполнитель останется пустым.
4. Теперь зайдите на вкладку "Вставка", выберите рисунок, выберите в проводнике картинку по тем же параметрам что и в п3, и........
О чудо!!! Получилось то же самое что и в 3 действии! Картинка вставилась в заполнитель, который уже есть на слайде. Встал центром в предназначенную для него рамку, а выходящие за рамку края обрезались! Самый прикол в том, что пока я это писал, сам же и проделывал, а до этого не знал, что Shapes.AddPicture точно так же вставит картинку в заполнитель, наплевав на отправленные параметры в методе (например left и top я установил равными 0, а картинка все равно вставилась в заполнитель как захотела). И блин в MSDN про это не сказано ни слова!
Короче получилось как мне и было нужно, всем спасибо. :)
Тему пока не ставлю как решенную, потому что могут возникнуть вопросы с программированием анимации, а это тоже входит в сабж. )
И блин в MSDN про это не сказано ни слова! »
У микрософт бывает что-то недописано... привыкайте. У разработчиков обычно бывает вообще ничего не написано. Рой себе г@&#@код... свой... годичной давности...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.