Операции с PowerPoint/PPTX презентациями
Создание, редактирование и анализ PPTX-презентаций через python-pptx в песочнице. Поддержка графиков, таблиц, дизайн-систем. Используй этот навык всякий раз, когда пользователь упоминает «презентацию», «слайды», «питч-дек», «коммерческое предложение», «pptx», «PowerPoint» или хочет создать/отредактировать файл .pptx — даже если не называет формат явно. Также триггерится на запросы вроде «сделай слайды», «подготовь презентацию», «нужен питч-дек».
Операции с PowerPoint/PPTX презентациями (v3)
S0. СТОП-ПРАВИЛА — читай ПЕРВЫМИ
⚠️ ЗАПРЕЩЁННЫЕ ИМПОРТЫ И ВЫЗОВЫ (НЕ СУЩЕСТВУЮТ в python-pptx):
| Запрещено | НЕ существует | Правильная замена |
| MSO_AUTO_SHAPE_TYPE.LINE | Нет такого атрибута | MSO_CONNECTOR_TYPE.STRAIGHT + add_connector() |
| MSO_AUTO_SHAPE_TYPE.RECTANGLE | Нет такого атрибута | MSO_SHAPE.RECTANGLE |
| slide.add_shape(...) | Нет такого метода | slide.shapes.add_shape(...) |
| shape.text = "..." напрямую | Только чтение | shape.text_frame.paragraphs[0].text = "..." |
| chart.showValue | camelCase не работает | plot.has_data_labels = True; lbl.show_value = True |
| chart.showPercent | camelCase не работает | lbl.show_percentage = True |
⛔ ДЛЯ РЕДАКТИРОВАНИЯ slides.json используй repl_execute (Path.write_text), НЕ edit_file.
edit_file — это search/replace, ломается на кириллице при поиске точного JSON-блока. Path.write_text пишет файл целиком в UTF-8.
Алгоритм редактирования (всё в одном repl_execute):
S1. API-справочник — ТОЛЬКО для редактирования существующих файлов
Диаграммы (встроенные python-pptx)
Позиционирование: диаграмма должна занимать ~70% площади слайда, по центру:
Столбчатая диаграмма:
S2. Рабочий процесс
Фаза 2. План
ПЕРЕД кодом составь план: для КАЖДОГО слайда — номер, заголовок, макет, элементы. НЕ делай 5+ одинаковых контентных слайдов подряд — чередуй макеты.
⛔ ПРАВИЛО СТРУКТУРЫ (критично):
- Между любыми двумя section_divider — МИНИМУМ 2 контент-слайда. Нарушение = брак.
- ГЕНЕРИРУЙ ВСЕ СЛАЙДЫ из плана. Не пропускай, не объединяй, не сокращай.
- Если пользователь назвал конкретные слайды — сделай каждый из них.
⛔ ПЛОТНОСТЬ КОНТЕНТА (обязательно):
- bullets: минимум 6 пунктов, каждый 8–15 слов (конкретика, цифры, факты, последствия). 4 коротких буллета = пустой слайд = брак
- stat_highlight: 3–4 карточки, значения — реальные числа/проценты/суммы
- cards_grid: минимум 3 карточки, body — 2–3 предложения с деталями
- two_column: минимум 4 пункта в каждой колонке
- table: минимум 3 строки данных
- Пустые или однострочные слайды ЗАПРЕЩЕНЫ.
Каждый слайд должен содержать минимум 1 визуальный элемент (фигура, диаграмма, таблица, цветной блок, иконка-символ). Слайд
из одного текста — запрещён.
Обязательная структура презентации: - Opening (1 слайд) — титул, тёмный фон, название + подзаголовок
- Content (основная часть) — чередуй макеты (stat_highlight, icon_grid, chart_focus, two_column, cards_grid)
- Section divider — вставляй между логическими блоками каждые 2–4 контентных слайда
- Ending (1 слайд) — "Спасибо", контакты или CTA; тёмный фон, как Opening
Канонический порядок:
Opening → Content × 2–3 → Section Divider → Content × 2–3 → ... → Ending
ЗАПРЕЩЕНО: два Section Divider подряд без минимум 2 контент-слайдов между ними — это главный баг, который делает презентацию пустой.
Opening и Ending — строго по одному.
Ending — ВСЕГДА последний слайд презентации. Ничего после него нет.
НЕ делай 5+ одинаковых контентных слайдов подряд — чередуй макеты.
Фаза 3. Код
ОБЯЗАТЕЛЬНЫЙ ПОРЯДОК ИНСТРУМЕНТОВ:
❌ ЗАПРЕЩЕНО: писать python-pptx код вручную. Только JSON → renderer.
Фаза 4. QA — обязательный шаг перед выдачей файла
| Находка | Что делать |
|---|---|
overflow | Сократи текст пункта в slides.json до 8–15 слов или разнеси слайд на два — кегль renderer подберёт сам |
off_canvas | Фигура за краем слайда: правь координаты в макете, который её ставит |
margin | Блок ближе 0.3" к краю — сдвинь его внутрь |
overlap | Текст перекрыт фигурой поверх него — разведи их по вертикали |
contrast | Контраст ниже порога WCAG — возьми цвет текста из палитры темы, а не соседний оттенок |
JSON-схема slides.json
Изменить заголовок слайда (0-based индекс):
Обновить данные диаграммы:
Найти и заменить текст по всей презентации:
S2.6. Ремонт повреждённого .pptx
Presentation(path) падает / PowerPoint требует «восстановить файл» / битые теги в ppt/slides/slideN.xml — сначала структурный ремонт, потом редактирование (S2.5).
S3. Дизайн-справочник
Палитры
Каждая палитра содержит: Primary, Secondary, Accent, Light BG, + 6 цветов для диаграмм (graph_0..graph_5). ОБЯЗАТЕЛЬНО: при создании диаграмм используй graph_colors для серий/сегментов, НЕ Primary/Secondary.
| Тема | Primary | Secondary | Accent | Light BG | card | stroke | graph_0 | graph_1 | graph_2 | graph_3 | graph_4 | graph_5 | Применение |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Корпоратив | 1B365D | 2E86AB | E8B931 | F5F7FA | E8EDF5 | 2E86AB | 2E86AB | E8B931 | 1B365D | 5BA4CF | F4D03F | 8FBDD3 | Финансы, B2B |
| Финтех | 6C5CE7 | 00CEC9 | FD79A8 | F8F9FA | F0EEFF | 6C5CE7 | 6C5CE7 | 00CEC9 | FD79A8 | A29BFE | 55EFC4 | FDCB6E | IT, SaaS |
| Экология | 00B894 | 55E6C1 | FDCB6E | F0FFF4 | E8FFF8 | 00B894 | 00B894 | 55E6C1 | FDCB6E | 00D2D3 | 81ECEC | F9CA24 | ESG, здоровье |
| Премиум | 2D3436 | 636E72 | D4A574 | FAFAFA | F5F5F5 | 636E72 | D4A574 | 636E72 | 2D3436 | B8A089 | 95A5A6 | DFE6E9 | Люкс, инвестиции |
| Энергия | E17055 | FDCB6E | 6C5CE7 | FFF9F0 | FFF3EE | E17055 | E17055 | FDCB6E | 6C5CE7 | F8A5C2 | F9E852 | A29BFE | Маркетинг, медиа |
Использование в коде:
Дополнительные цвета — семантические токены
Линия-разделитель — add_connector():
Цветной блок / карточка — textbox с заливкой:
Прямоугольник без текста — если нужна просто фигура:
Похожие навыки
Попробуйте этот навык
Зарегистрируйтесь и используйте навык «Операции с PowerPoint/PPTX презентациями» бесплатно.