CodeGym /課程 /Python SELF TW /使用模板創建自動化報告

使用模板創建自動化報告

Python SELF TW
等級 44 , 課堂 4
開放

1. 自動化報告

歡迎來到自動化報告的世界!如果你曾經夢想過創建報告就像按下一個按鈕那麼簡單,那麼你來對地方了。今天我們將學習如何使用模板創建自動化報告。我們將討論如何優化這個過程,避免繁瑣的工作,讓你的報告變得像你最強大的 Python 腳本一樣酷!

為什麼要使用模板?

沒有人喜歡從事枯燥、重複性的工作,尤其是處理報告。如果每份報告都可以自動生成,直接插入數據到預定義的格式呢?模板可以幫助我們創建一個可以多次重複使用的基本結構,填入新的數據。這樣能節省你的時間和精力,並且讓報告變得穩定又整齊。

使用模板的優勢:

  • 速度與效率: 預先準備好的模板可以讓你比以往任何時候都更快生成報告。
  • 統一風格: 所有報告都有一致的風格,既容易閱讀又專業。
  • 減少錯誤: 已檢查的結構能最大限度地減少格式錯誤。
  • 易修改: 模板的變更可以應用到所有報告中,讓維護更簡單。

2. 創建簡單的報告模板

在 ReportLab 中的基本 PDF 模板元素

在 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. 標題與副標題: 使用樣式 TitleStyleSubtitleStyle 格式化標題和副標題,使其易於閱讀且視覺上突出。
  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 標誌的帽子。

所以,有了這些工具,你已經準備好創建既資訊豐富又美觀大方的報告,並且幾乎不需要什麼努力。嘗試將不同的分析集成到你的報告中,以提高其價值和質量。祝你好運,創建讓你的同事和上司印象深刻的模板!

1
問卷/小測驗
使用 ReportLab 建立 pdf,等級 44,課堂 4
未開放
使用 ReportLab 建立 pdf
使用 ReportLab 建立 pdf
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION