ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

python-docx и python-pptx: создаём и проверяем отчёт

Автор: · Обновлено

Один набор данных часто нужно представить и в документе, и в презентации. В этом практикуме Python создаст DOCX-таблицу и PPTX-слайд из одинаковых исходных строк, затем прочитает…

Один набор данных часто нужно представить и в документе, и в презентации. В этом практикуме Python создаст DOCX-таблицу и PPTX-слайд из одинаковых исходных строк, затем прочитает сохранённые файлы и проверит их содержимое. Цель — освоить всю цепочку «данные → документ → проверка», а не ограничиться установкой двух библиотек.

Пакеты и имена импортов

В отдельном активированном окружении выполните:

python -m pip install python-docx python-pptx
python -m pip check

Дистрибутив python-docx импортируется как docx, python-pptx — как pptx. Не заменяйте эти имена похожими пакетами без проверки документации. Библиотеки создают файлы форматов Office Open XML; установленный Word или PowerPoint не нужен для показанного сохранения. Возможности API описаны в python-docx и python-pptx.

Полный генератор отчёта

В новой учебной папке сохраните office_report.py. Имена report.docx и report.pptx используются для результатов примера; при повторном запуске эти файлы обновляются.

from docx import Document
from pptx import Presentation
from pptx.util import Inches

rows = [("Ира", 7), ("Олег", 9)]
total = sum(count for _, count in rows)

document = Document()
document.add_heading("Отчёт учебной группы", level=1)
table = document.add_table(rows=1, cols=2)
table.rows[0].cells[0].text = "Участник"
table.rows[0].cells[1].text = "Задачи"
for name, count in rows:
    cells = table.add_row().cells
    cells[0].text = name
    cells[1].text = str(count)
document.add_paragraph(f"Всего решено задач: {total}")
document.save("report.docx")

presentation = Presentation()
slide = presentation.slides.add_slide(presentation.slide_layouts[5])
slide.shapes.title.text = "Результат недели"
box = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(1))
box.text_frame.text = f"Решено задач: {total}"
presentation.save("report.pptx")

saved_document = Document("report.docx")
saved_presentation = Presentation("report.pptx")
assert saved_document.tables[0].cell(2, 1).text == "9"
assert saved_presentation.slides[0].shapes.title.text == "Результат недели"
print("DOCX:", len(saved_document.tables[0].rows) - 1, "строки данных")
print("PPTX:", len(saved_presentation.slides), "слайд")
print("Итого:", total)

Запустите python office_report.py. Ожидаемый вывод:

DOCX: 2 строки данных
PPTX: 1 слайд
Итого: 16

Утверждения assert проверяют значение в таблице и заголовок повторно открытой презентации. Ошибка здесь означает, что созданные документы отличаются от контракта примера, даже если функции save() не сообщили о сбое.

Почему данные вычисляются один раз

Список rows — единственный источник результата. Сумму рассчитываем до создания документов и передаём обоим форматам. Если в двух независимых ветках вручную написать числа 16 и 17, библиотеки сохранят оба файла без жалоб: согласованность бизнес-данных — ответственность вашей программы.

Индекс slide_layouts[5] относится к стандартному шаблону, который создаёт Presentation(). В чужой презентации порядок макетов может быть другим. При переходе к корпоративному шаблону сначала исследуйте его макеты и placeholders; не считайте этот индекс универсальным свойством всех PPTX.

Диагностика документов

No module named docx обычно требует проверки python -m pip show python-docx и пути интерпретатора. Если импорт указывает на ваш docx.py или pptx.py, переименуйте учебный файл: он заслонил установленную библиотеку.

При PermissionError проверьте, не открыт ли выходной файл в приложении, которое держит блокировку, и доступна ли папка для записи. Не заменяйте входной документ результатом, пока не проверили новую копию. Старые бинарные .doc и .ppt не становятся Open XML от простого изменения расширения.

Программное чтение проверяет содержимое, но не гарантирует одинаковый перенос строк и расположение элементов во всех офисных приложениях. После изменения шрифтов, размеров и макетов дополнительно откройте полученный файл в целевой программе. На этой проверке исполнены создание и повторное чтение файлов в Linux; визуальный результат в Word/PowerPoint не выдаётся за проверенный.

Практика: согласованный отчёт

Добавьте третьего участника с четырьмя решёнными задачами. Ожидайте три строки данных и сумму 20. Добавьте в презентацию второй слайд с лучшим результатом, а в DOCX — абзац с тем же именем победителя.

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

Источники