![]() |
PowerPoint автоматическое создание слайдов
На телевизоре крутятся презентации и видео. В том числе есть презентация с днями рождения сотрудников на неделю. Если честно это очень надоедает. Хотелось бы, чтобы запускался первый титульный слайд, а он бы уже формировал все последующие в зависимости от даты и вставлял нужную фото из папки. Даже не знаю с какой стороны к этому подойти. Ну, точнее понимаю что нужно через VBA, но все, что я могу сделать на VB - это написать какую-либо функцию или процедуру без взаимодействия с элементами презентации
|
morebeauty, Начало работы с языком VBA в ПО PowerPoint 2010 (машинный перевод) В меру подробно, с примерами.
Я считаю -- то, что надо. |
lxa85, спасибо, почитаю, как будет время, но все же я хотел немного иного ответа. Задача разовая. Понадобится ли когда-нибудь в дальнейшем использовать ВБА в поверпоинте - неизвестно. Посему хотелось бы конкретики. Ну, задачу ведь я обрисовал, хотелось бы список того, что мне понадобится и ссылки на хелп именно по этому списку, а не "программирование от А до Я" :)
|
morebeauty, хе. :)
Давай тогда начнем с того, что "обрисованная задача" имеет достаточно расплывчатое представление. Как я понял, формировать титульный слайд, как первооснову, руками -- это кака и бе-бе-бе. Ладно, допустим сотрудник взял на себя труд и его сформировал. Тогда циклом выдираем ФИО, и через некий разделитель (допустим запятую) вытаскиваем дату. Из этого формируем новый слайд. Как автоматически привязать к слайду картинку -- не знаю. Другое дело, если будет некая база (хоть текстовый файл), в котором будет указано, где ФИО, где дата рождения, (от сих на будущее можно посчитать юбилеи), и картинка фона + портрет (+ вариант шаблона оформления). Ну и из практики -- все равно придется проверять "руками". Т.к. у людей бывают очень длинные имена, фамилии и отчества. Т.е. надо будет проследить, чтобы слайд не рассыпался и(или) было применено правильно растяжение по шрифту. PP и VBA у меня под руками нет, поэтому пока только теория. Т.е. хотелось бы знать, с какими именно объектами придется работать. Т.к. список сотрудников может быть выражен как текстовым полем, так и таблицей. -- Понадобятся: Работа с файлами (загрузка картинок), работа с объектом типа рисунок. (тыц) Объект типа текстовое поле. (Координаты, символы форматирования, характеристики текста (растяжение по ширине, выравнивание по левому / правому краю / по центру)), (тыц, тыц) Работа с фоном.(тыц) Работа с объектом типа заголовок. (тыц) Создание нового слайда.(тыц) Общая справка: Все объекты и работа с каждым |
lxa85, почти все что нужно. :)
Цитата:
Но кроме этого должен быть еще заголовочный слайд, типа "на этой неделе у следующих людей дни рождения". И вот пока он висит, должны формироваться следующие несколько слайдов по количеству именинников на этой неделе. Про обработку событий я ничего не нашел, походу все макросы нужно запускать вручную :( Так как ресурсами комп, который это вещает, не богат, формировать каждый раз слайды не хотелось бы. То есть первый раз формируются и презентация сохраняется, потом только проверяется на соответствие дате. Если неделя новая, то все слайды (кроме первого, на котором меняется дата и стишок :) ), удаляются и формируются новые. Короче как то так. И самое главное, презентация сохранена в формате "демонстрация", то есть при запуске открывается не конструктор, а сразу начинается показ слайдов. |
Сотрудник приходит, формирует первый слайд в конструкторе, запускает макрос, получает остальные n'цать штук, проверяет, сохраняет как "демонстрацию" и отправляет на показ мультиков. Не вижу криминала.
Слайды формируются в рабочем черновике. Никаких генераций "на лету" во время просмотра. Забыть как страшный сон. Навешивать обработчики событий ... да нет, бред. Это же презентация, а не флеш игра с интерактивным взаимодействием и ветвлением событий. Цитата:
|
Тогда я усложню задачу. Есть презентация с набором шаблонов и одной лишь пользовательской формой, в которой я устанавливаю опции, типа выбора эффектов, временные настройки и другие. Еще в него вшиты 12 шаблонов оформления (на каждый месяц). Далее по нажатию кнопочки должна создаться презентация на основе всего выбранного. То есть к уже предложенным инструкциям еще нужны:
создание новой презентации; перенос настроек (шаблонов, коллекций и хз чего еще) в новую презентацию из имеющейся. Само собой, если это возможно. И еще. Файл с именами сотрудников и датами рождения в формате excel. Можно ли оттуда сдернуть данные? Или лучше сохранить в тексте? |
morebeauty, не наглей! :)
Применение шаблонов: тыц Работа с Excel: как сделать ... Пример работы с ячейками тыц Коллекции и "хз чего еще" требует уточнения. ---- Цитата:
Лучшее враг хорошего, не рой себе яму. Проще -- лучше. Лежат тихо мирно 12 файлов с презентациями по месяцам и пусть лежат. Кто захотел -- поправил. Не, сделать то можно, почувствовать за себя гордость, мол "во как могу!", боком вылезет, помяни мое слово! |
Цитата:
Открываю документ так Код:
Dim exlApp As Object, exlDoc As Object зачем мне нужен объект exlDoc, если к ячейкам я обращаюсь через exlApp? А что, если exlApp рано или поздно обратится к другому открытому документу на компе? Ведь exlApp.Cells(x,y) обращается к ячейке в exlApp.ActiveWorkbook. А значит я могу открыть документ на компе в момент работы макроса и он станет активным. Или это невозможно? Почему? В общем этот момент мне не понятен, поэтому я боюсь что он рано или поздно меня подведет. Цитата:
Цитата:
|
morebeauty, я не силен в VBA, но где то ошибка в логике.
Ты открываешь документ (open), читаешь из него необходимые данные, и закрываешь его. Всё. Работа с Excel закончилась. ActiveWorkbook будет рассматриваться в том случае, если макрос выполняется из экселя. Т.е. одно дело мы вытаскиваем из xlsx данные о сотрудниках извне, например из PowerPoint. Другое дело, когда у нас открыт Excel и нам надо выполнить макрос на текущей странице. По идее так. По практике подсказать не смогу, я под linux сижу. Тянуться до VBA далеко. |
Цитата:
|
Я делал N лет назад подобную штуку (вроде до сих пор работает) - показывать погоду из интернета по телевизору (Это частный случай; в общем случае генерил контент для кабельного канала).
Цитата:
№1: "Нажмите ESC чтобы закрыть презентацию". Решается предварительной установкой галочки в PP №2: "Не запущу скрипты, т.к. опасно". Скрипты запускаются через wscript, генерят презентации без скриптов. В таком варианте работает №3: "Не могу сгенерить контент (недоступен интернет)". Посылаем сообщение админу, показываем разные цветочки на экране №4: "Юзверь". Вообще мне попались умные девочки (которые настраивали презентации). Но и правило я придумал несложное: использование "тегов", т.е. ключевых слов на русском языке в угловых скобках. №5: "Race condition". Нельзя правиль презентацию в той папке, откуда идёт показ. Лучше туда копировать уже поправленное. А перед показом копировать презентацию в недоступное извне место. Вообще этот подход себя порошо показал (просто, быстро, надёжно). Главная заноза - правообладатели. |
Не могу найти еще кое что. Нужна помощь.
Все объекты (заголовок, текст, картинка) уже вшиты в макет для удобства. Меняю заголовок так: 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/libr...ice.15%29.aspx http://support.microsoft.com/KB/168649 |
Цитата:
Shapes.AddPicture не для моего случая. Я могу и ошибаться, но запустите powerpoint и сделайте то что я сейчас напишу, тогда вы поймете, чего я хочу (с учетом что у вас офис версии не ниже 2007). 1. Создайте новую презентацию 2. В первом слайде, который создастся автоматически, выберите дефолтный макет, в котором уже есть шейп для рисунка. 3. Щелкните по пиктограмме рисунка и в проводнике выберите рисунок, по размеру превышающий рамку. При этом вы увидите, что рисунок вставился в заполнитель и пиктограмма с рисунком пропала. Думаете, в этот момент выполнилось Shapes.AddPicture? Очень сомневаюсь. В заполнитель вставилась картинка. Если теперь выделить картинку и нажать Del (удалить), то заполнитель останется пустым. 4. Теперь зайдите на вкладку "Вставка", выберите рисунок, выберите в проводнике картинку по тем же параметрам что и в п3, и........ О чудо!!! Получилось то же самое что и в 3 действии! Картинка вставилась в заполнитель, который уже есть на слайде. Встал центром в предназначенную для него рамку, а выходящие за рамку края обрезались! Самый прикол в том, что пока я это писал, сам же и проделывал, а до этого не знал, что Shapes.AddPicture точно так же вставит картинку в заполнитель, наплевав на отправленные параметры в методе (например left и top я установил равными 0, а картинка все равно вставилась в заполнитель как захотела). И блин в MSDN про это не сказано ни слова! Короче получилось как мне и было нужно, всем спасибо. :) Тему пока не ставлю как решенную, потому что могут возникнуть вопросы с программированием анимации, а это тоже входит в сабж. ) |
Цитата:
|
Время: 20:42. |
Время: 20:42.
© OSzone.net 2001-