JavaRush /Курси /Python SELF UA /Використання шаблонів для створення автоматизованих звіті...

Використання шаблонів для створення автоматизованих звітів

Python SELF UA
Рівень 44 , Лекція 4
Відкрита

1. Автоматизовані звіти

Ласкаво просимо у світ автоматизації звітів! Якщо ти коли-небудь мріяв про те, щоб створення звітів було таким простим, як натиснення кнопки, ти потрапив за адресою. Сьогодні ми навчимося створювати автоматизовані звіти з використанням шаблонів. Поговоримо про те, як оптимізувати цей процес, щоб уникнути рутини й зробити твої звіти такими ж крутяцькими, як твій найвпевненіший Python-скрипт.

Чому шаблони?

Ніхто не любить займатися нудною, одноманітною роботою, особливо коли йдеться про звіти. Що, якщо кожен звіт міг би генеруватися автоматично, приймаючи дані й вставляючи їх у заздалегідь визначений формат? Шаблони дозволяють створити базову структуру, яку можна багаторазово використовувати, наповнюючи новими даними. Це економить твій час і нерви, і до того ж, робить звіти стабільними та акуратними.

Переваги використання шаблонів:

  • Швидкість і ефективність: Підготовлений шаблон дозволяє створювати звіти швидше, ніж будь-коли.
  • Єдиний стиль: Усі звіти мають однаковий стиль, що зручно для сприйняття й виглядає професійно.
  • Зменшення кількості помилок: Вже перевірена структура мінімізує помилки у форматуванні.
  • Легкість модифікації: Зміни у шаблоні застосовуються до всіх звітів, що спрощує їх підтримку.

2. Створення простого шаблону для звіту

Основні елементи шаблонів PDF у ReportLab

Для створення шаблонів звітів у ReportLab можна використовувати такі основні компоненти:

  • Текст і заголовки: використовуй текстові елементи для створення заголовків, підзаголовків і основного тексту.
  • Таблиці: для представлення даних у вигляді таблиць.
  • Графічні елементи: лінії, прямокутники, кола й інші форми для візуального оформлення.
  • Зображення: додання логотипів та інших зображень для професійного оформлення.

Створення шаблону з використанням SimpleDocTemplate

У ReportLab клас SimpleDocTemplate дозволяє створювати PDF із попередньо заданою структурою. Цей клас підтримує додавання тексту, таблиць та інших елементів за допомогою списку elements, що спрощує створення структурованих документів.

Створення шаблону PDF-звіту з текстом і таблицею

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib import colors

# Функція для створення шаблону звіту
def create_pdf_template(filename="report_template.pdf"):
    doc = SimpleDocTemplate(filename, pagesize=A4)
    styles = getSampleStyleSheet()
    elements = []

    # Заголовок звіту
    title_style = ParagraphStyle(
        "TitleStyle",
        parent=styles["Title"],
        fontSize=20,
        textColor=colors.darkblue,
        alignment=1,
        spaceAfter=20,
    )
    title = Paragraph("Шаблон звіту про продажі", title_style)
    elements.append(title)

    # Підзаголовок
    subtitle_style = ParagraphStyle(
        "SubtitleStyle",
        parent=styles["Heading2"],
        fontSize=14,
        textColor=colors.gray,
        alignment=1,
        spaceAfter=10,
    )
    subtitle = Paragraph("Звіт за квартал", subtitle_style)
    elements.append(subtitle)

    # Основний текст
    intro_text = """
    Цей шаблон звіту призначений для подання даних про продажі по регіонах і категоріях продуктів.
    Дані оновлюються автоматично, що дозволяє використовувати шаблон для регулярної звітності.
    """
    elements.append(Paragraph(intro_text, styles["BodyText"]))
    elements.append(Spacer(1, 20))

    # Таблиця для даних
    table_data = [["Категорія", "Регіон", "Продажі"]]
    # Приклад даних для таблиці (буде замінено динамічними даними)
    sample_data = [["Продукти A", "Північ", "1200"], ["Продукти B", "Південь", "1300"], ["Продукти C", "Захід", "1100"]]
    table_data.extend(sample_data)

    # Стилізація таблиці
    table_style = TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
    ])

    table = Table(table_data)
    table.setStyle(table_style)
    elements.append(table)

    # Збереження PDF
    doc.build(elements)
    print(f"Шаблон звіту успішно збережено як {filename}")

# Створення шаблону звіту
create_pdf_template()

Пояснення до коду

  1. Заголовок і підзаголовок: Використовуються стилі TitleStyle і SubtitleStyle для оформлення заголовку та підзаголовку, що робить їх легко читабельними й візуально виділяє.
  2. Основний текст: Текст пояснює, що звіт представляє шаблон і призначений для автоматизації звітності.
  3. Таблиця: Таблиця є структурою для заповнення даними. Приклад даних (sample_data) може бути замінено реальними значеннями під час генерації звіту.
  4. Збереження: SimpleDocTemplate зберігає PDF у файл report_template.pdf.

3. Заповнення шаблону даними

Автоматичне заповнення шаблону даними

Тепер, коли у нас є базовий шаблон, ми можемо створити функцію, яка приймає дані й автоматично заповнює таблицю. Це корисно для створення звітів, де дані надходять із бази даних, API або файлу.

Функція для автоматичного заповнення шаблону

Python

def fill_pdf_template(data, filename="filled_report.pdf"):
    doc = SimpleDocTemplate(filename, pagesize=A4)
    styles = getSampleStyleSheet()
    elements = []

    # Заголовок звіту
    title = Paragraph("Звіт про продажі", styles["Title"])
    elements.append(title)

    # Підзаголовок
    subtitle = Paragraph("Дані по продажах за вказаний період", styles["Heading2"])
    elements.append(subtitle)
    elements.append(Spacer(1, 20))

    # Динамічне заповнення таблиці даними
    table_data = [["Категорія", "Регіон", "Продажі"]] + data
    table = Table(table_data)

    # Застосування стилів до таблиці
    table.setStyle(TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
    ]))

    elements.append(table)

    # Збереження PDF
    doc.build(elements)
    print(f"Звіт успішно збережено як {filename}")

# Приклад даних для заповнення шаблону
data = [
    ["Продукти A", "Північ", "1200"],
    ["Продукти B", "Південь", "1300"],
    ["Продукти C", "Захід", "1100"],
]

# Заповнення шаблону даними
fill_pdf_template(data)

Пояснення коду

  1. Функція fill_pdf_template: Ця функція приймає дані у вигляді списку і вставляє їх у таблицю шаблону. Вона замінює приклад даних фактичними значеннями, які передаються у функцію.
  2. Створення таблиці з динамічними даними: Дані додаються до заголовків таблиці, створюючи повноцінну таблицю, готову до відображення у звіті.
  3. Збереження звіту: Кінцевий звіт зберігається як filled_report.pdf.

Автоматизація створення звітів з використанням шаблону

Процес створення звітів може бути повністю автоматизований, особливо якщо дані регулярно оновлюються. Наприклад, можна створити функцію, яка отримує дані з бази даних, завантажує їх у шаблон і зберігає звіт щомісяця.

Python

import datetime

def generate_monthly_report(data):
    # Створення імені файлу на основі поточної дати
    today = datetime.date.today()
    filename = f"sales_report_{today.strftime('%Y_%m')}.pdf"

    # Заповнення шаблону даними і збереження
    fill_pdf_template(data, filename)
    print(f"Місячний звіт збережено як '{filename}'.")

# Приклад даних для щомісячного звіту

4. Гнучкість використання шаблонів

Перевага роботи з шаблонами полягає в тому, що ти можеш швидко адаптувати їх для різних звітів. Припустимо, ти хочеш додати в звіт діаграму чи таблицю. Використовуючи reportlab, це можна зробити дуже легко.

Додавання діаграм і таблиць

Ось як можна додати в звіт таблицю:

Python

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# Функція для створення звіту з таблицею
def create_report_with_table(output_path):
    doc = SimpleDocTemplate(output_path, pagesize=letter)
    elements = []

    # Приклад даних для таблиці
    data = [['Колонка 1', 'Колонка 2', 'Колонка 3'],
            ['Дані 1', 'Дані 2', 'Дані 3'],
            ['Дані A', 'Дані B', 'Дані C']]

    table = Table(data)
    style = TableStyle([
        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
        ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
        ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
        ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ('GRID', (0, 0), (-1, -1), 1, colors.black),
    ])
    table.setStyle(style)

    elements.append(table)
    doc.build(elements)

# Генерація звіту з таблицею
create_report_with_table("report_with_table.pdf")

Переваги автоматизації звітів

Автоматизація звітів із використанням шаблонів спрощує створення складних документів і дозволяє зосередитися на аналізі даних, а не на їх оформленні. У майбутньому, коли твій начальник попросить «той самий звіт, тільки з даними за останній місяць», ти можеш махнути чарівною паличкою PyPDF2 і ReportLab і додати свої дані у вже існуючий шаблон. Це наче мати суперсилу, але без необхідності вдягати шапочку з логотипом Python.

Отож, озброївшись цими інструментами, ти готовий створювати звіти, які не лише інформативні, але й естетично привабливі, з мінімальними зусиллями. Спробуй інтегрувати різну аналітику у свої звіти, щоб підвищити їх цінність і якість. Удачі у створенні шаблонів, що вразять твоїх колег і керівництво!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ