Автоматизация создания отчетов PowerPoint на Python: диаграммы, таблицы и изображения
Представьте, что вы аналитик данных, которому нужно каждую неделю создавать 20-страничный отчет в PowerPoint. Каждая страница содержит различные диаграммы, таблицы и изображения, полученные из последних данных. Выполнение этой задачи вручную отнимает много времени, чревато ошибками и носит повторяющийся характер.
Python предлагает решение. С помощью Free Spire.Presentation for Python вы можете автоматизировать весь процесс — программно создавать презентации, заполнять их данными и сохранять в различных форматах, даже не открывая Microsoft Office.
Эта статья проведет вас через основные возможности Spire.Presentation для создания автоматизированных отчетов: таблицы, диаграммы и изображения. Прочитав ее до конца, вы получите базовые компоненты для создания собственных динамических отчетов PowerPoint.
Часть 1: Настройка окружения
Что такое Free Spire.Presentation for Python?
Free Spire.Presentation for Python — это автономная библиотека для создания, чтения и изменения файлов PowerPoint. Она не требует установки Microsoft Office или каких-либо других зависимостей. Основные возможности включают:
Создание презентаций с нуля или из шаблонов
Добавление текста, изображений, таблиц, диаграмм и фигур
Настройку шрифтов, цветов, фонов и макетов
Экспорт в форматы PPT, PPTX, PDF или изображения
Установка
Установите библиотеку с помощью pip:
pip install spire.presentation.free
Ваша первая программа: Создание пустой презентации
Начнем с простого примера "Hello World":
from spire.presentation.common import *
from spire.presentation import *
# Создание объекта Presentation
presentation = Presentation()
# Установка размера слайда на широкоэкранный
presentation.SlideSize.Type = SlideSizeType.Screen16x9
# Добавление нового слайда (по умолчанию уже существует один слайд)
presentation.Slides.Append()
# Сохранение документа
presentation.SaveToFile("BlankPresentation.pptx", FileFormat.Pptx2019)
presentation.Dispose()
Этот код создает пустой файл PowerPoint с двумя слайдами.
Часть 2: Работа с таблицами
Таблицы необходимы для представления структурированных данных в отчетах. Spire.Presentation позволяет легко создавать и стилизовать таблицы.
Создание базовой таблицы
Следующий код добавляет таблицу на первый слайд:
# Получение первого слайда
first_slide = presentation.Slides[0]
# Определение ширины столбцов и высоты строк
widths = [200, 200, 200]
heights = [18, 18, 18, 18]
# Определение данных таблицы
data = [
["Slide Number", "Title", "Content Type"],
["1", "Introduction", "Text/Image"],
["2", "Project Overview", "Chart/Graph"],
["3", "Key Findings", "Text/List"]
]
# Добавление таблицы на слайд с координатами (30, 60)
table = first_slide.Shapes.AppendTable(30, 60, widths, heights)
# Заполнение ячеек таблицы данными
for row_num, row_data in enumerate(data):
for col_num, cell_data in enumerate(row_data):
cell = table[col_num, row_num]
cell.TextFrame.Text = cell_data
# Форматирование текста
text_range = cell.TextFrame.Paragraphs[0].TextRanges[0]
text_range.LatinFont = TextFont("Times New Roman")
text_range.FontHeight = 20
cell.TextFrame.Paragraphs[0].Alignment = TextAlignmentType.Center
# Применение встроенного стиля таблицы
table.StylePreset = TableStylePreset.MediumStyle2Accent1
Метод AppendTable принимает координаты X и Y, ширину столбцов и высоту строк. Свойство StylePreset применяет предопределенные стили для придания таблице профессионального вида.
Часть 3: Работа с диаграммами
Диаграммы оживляют данные. Spire.Presentation поддерживает различные типы диаграмм, включая гистограммы, линейчатые, круговые и многие другие.
Создание диаграммы
Вот как добавить гистограмму на слайд:
# Получение первого слайда
slide = presentation.Slides[0]
# Добавление кластеризованной гистограммы
rect = RectangleF.FromLTRB(40, 80, 700, 450)
chart = slide.Shapes.AppendChartInit(ChartType.ColumnClustered, rect, False)
# Установка заголовка диаграммы
chart.ChartTitle.TextProperties.Text = "Sales by Region"
chart.ChartTitle.TextProperties.IsCentered = True
chart.ChartTitle.Height = 25
chart.HasTitle = True
# --- 1. Настройка структуры данных диаграммы ---
# Строка 0: Метки рядов (заголовки столбцов)
chart.ChartData[0,0].Text = "Region"
chart.ChartData[0,1].Text = "North"
chart.ChartData[0,2].Text = "South"
chart.ChartData[0,3].Text = "East"
chart.ChartData[0,4].Text = "West"
# Столбец 0: Метки категорий (заголовки строк)
chart.ChartData[1,0].Text = "Q1 Sales"
chart.ChartData[2,0].Text = "Q2 Sales"
# --- 2. Корректное заполнение всех значений данных ---
# Данные о продажах: [Продажи Q1, Продажи Q2] для каждого региона
sales_data = {
"North": [120, 85],
"South": [150, 95],
"East": [110, 130],
"West": [90, 105]
}
# Индекс столбца для каждого региона (от 1 до 4)
region_columns = {"North": 1, "South": 2, "East": 3, "West": 4}
# Заполнение данных: строки 1 и 2 соответствуют Q1 и Q2
for region, col_index in region_columns.items():
# Продажи Q1 (строка 1)
chart.ChartData[1, col_index].NumberValue = sales_data[region][0]
# Продажи Q2 (строка 2)
chart.ChartData[2, col_index].NumberValue = sales_data[region][1]
# --- 3. Установка рядов данных и категорий диаграммы ---
# Установка меток рядов (названия регионов в строке 0, столбцы 1-4)
chart.Series.SeriesLabel = chart.ChartData["B1","E1"]
# Установка меток категорий (Q1, Q2 в столбце 0, строки 1-2)
chart.Categories.CategoryLabels = chart.ChartData["A2","A3"]
# Установка значений для каждого ряда (каждый ряд соответствует региону)
# Ряд 0: Север (столбец B, строки 1-2)
chart.Series[0].Values = chart.ChartData["B2","B3"]
# Ряд 1: Юг (столбец C, строки 1-2)
chart.Series[1].Values = chart.ChartData["C2","C3"]
# Ряд 2: Восток (столбец D, строки 1-2)
chart.Series[2].Values = chart.ChartData["D2","D3"]
# Ряд 3: Запад (столбец E, строки 1-2)
chart.Series[3].Values = chart.ChartData["E2","E3"]
# --- 4. Настройка внешнего вида диаграммы ---
# Установка ширины промежутка между столбцами
chart.GapWidth = 350
# Установка перекрытия между рядами (отрицательное значение означает отсутствие перекрытия)
chart.OverLap = -50
# Установка цвета заливки для каждого ряда
chart.Series[0].Fill.FillType = FillFormatType.Solid
chart.Series[0].Fill.SolidColor.Color = Color.get_CadetBlue()
chart.Series[1].Fill.FillType = FillFormatType.Solid
chart.Series[1].Fill.SolidColor.Color = Color.get_LightBlue()
chart.Series[2].Fill.FillType = FillFormatType.Solid
chart.Series[2].Fill.SolidColor.Color = Color.get_Orange()
chart.Series[3].Fill.FillType = FillFormatType.Solid
chart.Series[3].Fill.SolidColor.Color = Color.get_LightGreen()
# Добавление подписей данных для всех рядов
for series in chart.Series:
for i in range(2): # Две категории: Q1 и Q2
series.DataLabels.Add()
Как это работает
Создание диаграммы с помощью Spire.Presentation требует понимания ее базовой модели данных, которая функционирует как миниатюрная электронная таблица.
1. Сетка ChartData
Свойство ChartData предоставляет доступ к двумерной сетке ячеек, индексируемой как [строка, столбец]. Вы заполняете эту сетку своими данными, различая текст (для меток) и числа (для значений).
2. Определение структуры данных
В нашем примере мы структурируем данные следующим образом:
Строка 0 : Содержит метки рядов (заголовки столбцов), которые являются названиями регионов.
Столбец 0 : Содержит метки категорий (заголовки строк), которые являются названиями кварталов.
Ячейки (1,1) - (2,4) : Содержат собственно числовые данные о продажах.
Эта структура напоминает стандартную таблицу Excel, что делает ее интуитивно понятной для организации.
3. Сопоставление данных с элементами диаграммы
После заполнения сетки вы должны явно указать диаграмме, какие диапазоны использовать для трех ее основных компонентов:
# 1. Метки рядов: имена рядов данных (например, "North", "South")
# Берется текст из строки 0, столбцы с 1 по 4.
chart.Series.SeriesLabel = chart.ChartData["B1","E1"]
# 2. Метки категорий: имена категорий (например, "Q1 Sales", "Q2 Sales")
# Берется текст из столбца 0, строки с 1 по 2.
chart.Categories.CategoryLabels = chart.ChartData["A2","A3"]
# 3. Значения рядов: фактические точки данных для каждого ряда.
# Каждый ряд получает свой собственный диапазон.
# Ряд 0 ("Север") берет числовые значения из столбца B, строки с 1 по 2.
chart.Series[0].Values = chart.ChartData["B2","B3"]
Строки диапазонов (например, "B1","E1") похожи на нотацию Excel и определяют прямоугольный блок ячеек.
4. Настройка внешнего вида диаграммы
Помимо привязки данных, вы можете значительно улучшить читаемость и визуальную привлекательность диаграммы:
Цвета : Назначьте различные цвета каждому ряду с помощью chart.Series[i].Fill.SolidColor.Color.
Подписи данных : Добавьте числа над каждым столбцом с помощью series.DataLabels.Add().
Макет : Настройте расстояние между столбцами с помощью chart.GapWidth и перекрытие между рядами с помощью chart.OverLap.
Часть 4: Работа с изображениями и фигурами
Изображения и фигуры делают отчеты более привлекательными визуально. Вы можете вставлять изображения, устанавливать фоны и объединять фигуры в группы.
Вставка изображения
# Получение первого слайда
first_slide = presentation.Slides[0]
# Загрузка файла изображения
image_path = r"C:\Users\Administrator\Desktop\image.png"
stream = Stream(image_path)
image_data = presentation.Images.AppendStream(stream)
# Установка размера и положения
width = image_data.Width * 0.8
height = image_data.Height * 0.8
rect = RectangleF.FromLTRB(50, 50, 50 + width, 50 + height)
# Вставка изображения
image = first_slide.Shapes.AppendEmbedImageByImageData(
ShapeType.Rectangle, image_data, rect)
image.Line.FillType = FillFormatType.none # Удаление границы
Метод AppendEmbedImageByImageData встраивает изображение на слайд в указанном месте и с указанным размером.
Установка фонового изображения
Вы также можете установить изображение в качестве фона слайда:
background = first_slide.SlideBackground
background.Type = BackgroundType.Custom
background.Fill.FillType = FillFormatType.Picture
background.Fill.PictureFill.FillType = PictureFillType.Stretch
background.Fill.PictureFill.Picture.EmbedImage = image_data
Это растягивает изображение, чтобы заполнить весь слайд.
Часть 5: Важные замечания и лучшие практики
Ограничения бесплатной версии
Бесплатная версия Spire.Presentation для Python имеет два основных ограничения:
Ограничение на количество страниц : Вы можете создавать презентации только до 10 страниц
Ограничение на конвертацию : Экспорт в PDF, изображения или XPS поддерживает только первые 3 страницы
Для производственного использования рассмотрите возможность обновления до коммерческой версии для снятия этих ограничений.
Управление ресурсами
Всегда вызывайте Dispose() после сохранения презентации, чтобы освободить системные ресурсы:
presentation.SaveToFile("output.pptx", FileFormat.Pptx2019)
presentation.Dispose()
Советы по производительности
Используйте абсолютные пути к файлам при загрузке изображений или шаблонов, чтобы избежать проблем с разрешением путей
Оборачивайте файловые операции в блоки try-except для корректной обработки отсутствующих файлов
Для больших отчетов рассмотрите возможность обработки слайдов партиями для управления использованием памяти
Заключение
Free Spire.Presentation предоставляет полный набор инструментов для автоматизации создания отчетов PowerPoint. В этой статье мы рассмотрели три основных строительных блока:
Таблицы — для представления структурированных данных с настраиваемыми стилями
Диаграммы — для визуализации тенденций и сравнений
Изображения — для добавления визуальных элементов и фонов
С помощью этих возможностей вы можете программно создавать презентации на основе данных, экономя бесчисленные часы ручной работы. Создаете ли вы еженедельные отчеты о продажах, ежеквартальные обзоры бизнеса или операционные панели мониторинга, автоматизация на Python делает этот процесс масштабируемым и воспроизводимым.
Начните создавать свой автоматизированный конвейер отчетности уже сегодня — установите Free Spire.Presentation и превращайте данные в презентации с помощью кода.






















