CodeGym /Các khóa học /Python SELF VI /Sử dụng template để tạo báo cáo tự động

Sử dụng template để tạo báo cáo tự động

Python SELF VI
Mức độ , Bài học
Có sẵn

1. Báo cáo tự động

Chào mừng bạn đến với thế giới tự động hóa báo cáo! Nếu bạn từng ước rằng việc tạo báo cáo có thể dễ dàng như nhấn nút, thì bạn đã đến đúng chỗ. Hôm nay, chúng ta sẽ học cách tạo ra các báo cáo tự động bằng cách sử dụng template. Hãy cùng thảo luận về cách tối ưu hóa quy trình này để tránh công việc lặp đi lặp lại và làm cho báo cáo của bạn ngầu như một script Python tự tin nhất của bạn.

Tại sao lại là template?

Không ai thích làm công việc nhàm chán và lặp đi lặp lại, đặc biệt là khi nói đến báo cáo. Điều gì sẽ xảy ra nếu mỗi báo cáo có thể được tạo tự động, nhận dữ liệu và chèn chúng vào một định dạng được xác định trước? Template cho phép chúng ta tạo một cấu trúc cơ bản, có thể sử dụng lại nhiều lần, chỉ cần điền dữ liệu mới. Nó tiết kiệm thời gian và thần kinh của bạn, và đồng thời, làm cho báo cáo trông nhất quán và gọn gàng.

Lợi ích của việc sử dụng template:

  • Tốc độ và hiệu quả: Một template được chuẩn bị sẵn cho phép phát hành báo cáo nhanh hơn bao giờ hết.
  • Phong cách thống nhất: Tất cả các báo cáo có cùng phong cách, giúp dễ dàng quan sát và trông chuyên nghiệp.
  • Giảm thiểu lỗi: Một cấu trúc đã được kiểm tra giúp giảm thiểu lỗi định dạng.
  • Dễ dàng sửa đổi: Thay đổi trong template được áp dụng cho tất cả báo cáo, làm cho việc bảo trì dễ dàng hơn.

2. Tạo một template đơn giản cho báo cáo

Các thành phần cơ bản của template PDF trong ReportLab

Để tạo template báo cáo trong ReportLab, bạn có thể sử dụng các thành phần cơ bản sau:

  • Văn bản và tiêu đề: sử dụng các thành phần văn bản để tạo tiêu đề, tiêu đề phụ và văn bản chính.
  • Bảng biểu: để trình bày dữ liệu dưới dạng bảng.
  • Thành phần đồ họa: đường kẻ, hình chữ nhật, hình tròn và các hình dạng khác để trình bày hình ảnh.
  • Hình ảnh: thêm logo và các hình ảnh khác để trình bày chuyên nghiệp.

Tạo template sử dụng SimpleDocTemplate

Trong ReportLab, lớp SimpleDocTemplate cho phép tạo file PDF với cấu trúc được xác định trước. Lớp này hỗ trợ thêm văn bản, bảng biểu và các thành phần khác thông qua danh sách elements, giúp việc tạo tài liệu có cấu trúc trở nên dễ dàng hơn.

Tạo template PDF báo cáo với văn bản và bảng biểu

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

# Hàm tạo template báo cáo
def create_pdf_template(filename="report_template.pdf"):
    doc = SimpleDocTemplate(filename, pagesize=A4)
    styles = getSampleStyleSheet()
    elements = []

    # Tiêu đề báo cáo
    title_style = ParagraphStyle(
        "TitleStyle",
        parent=styles["Title"],
        fontSize=20,
        textColor=colors.darkblue,
        alignment=1,
        spaceAfter=20,
    )
    title = Paragraph("Template báo cáo bán hàng", title_style)
    elements.append(title)

    # Tiêu đề phụ
    subtitle_style = ParagraphStyle(
        "SubtitleStyle",
        parent=styles["Heading2"],
        fontSize=14,
        textColor=colors.gray,
        alignment=1,
        spaceAfter=10,
    )
    subtitle = Paragraph("Báo cáo quý", subtitle_style)
    elements.append(subtitle)

    # Văn bản chính
    intro_text = """
    Template báo cáo này dành cho việc trình bày dữ liệu bán hàng theo vùng và danh mục sản phẩm.
    Dữ liệu được cập nhật tự động, giúp sử dụng template này cho báo cáo định kỳ.
    """
    elements.append(Paragraph(intro_text, styles["BodyText"]))
    elements.append(Spacer(1, 20))

    # Bảng biểu cho dữ liệu
    table_data = [["Danh mục", "Vùng", "Doanh số"]]
    # Dữ liệu mẫu cho bảng (sẽ được thay thế bằng dữ liệu động)
    sample_data = [["Sản phẩm A", "Miền bắc", "1200"], ["Sản phẩm B", "Miền nam", "1300"], ["Sản phẩm C", "Miền tây", "1100"]]
    table_data.extend(sample_data)

    # Phong cách bảng
    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)

    # Lưu PDF
    doc.build(elements)
    print(f"Template báo cáo đã được lưu thành công dưới tên {filename}")

# Tạo template báo cáo
create_pdf_template()

Giải thích code

  1. Tiêu đề và tiêu đề phụ: Sử dụng phong cách TitleStyleSubtitleStyle để định dạng tiêu đề và tiêu đề phụ, làm cho chúng dễ đọc và nổi bật hình thức.
  2. Văn bản chính: Văn bản giải thích rằng báo cáo này là một template và được thiết kế để tự động hóa báo cáo.
  3. Bảng biểu: Bảng biểu cung cấp cấu trúc để điền dữ liệu. Dữ liệu mẫu (sample_data) có thể được thay thế bằng các giá trị thực khi tạo báo cáo.
  4. Lưu: SimpleDocTemplate lưu file PDF dưới tên report_template.pdf.

3. Điền dữ liệu vào template

Tự động điền dữ liệu vào template

Bây giờ chúng ta đã có template cơ bản, chúng ta có thể tạo một hàm nhận dữ liệu và tự động điền vào bảng biểu. Điều này rất hữu ích để tạo báo cáo trong đó dữ liệu đến từ cơ sở dữ liệu, API hoặc file.

Hàm tự động điền dữ liệu vào template

Python

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

    # Tiêu đề báo cáo
    title = Paragraph("Báo cáo bán hàng", styles["Title"])
    elements.append(title)

    # Tiêu đề phụ
    subtitle = Paragraph("Dữ liệu bán hàng trong giai đoạn chỉ định", styles["Heading2"])
    elements.append(subtitle)
    elements.append(Spacer(1, 20))

    # Điền dữ liệu động vào bảng biểu
    table_data = [["Danh mục", "Vùng", "Doanh số"]] + data
    table = Table(table_data)

    # Áp dụng phong cách cho bảng biểu
    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)

    # Lưu PDF
    doc.build(elements)
    print(f"Báo cáo đã được lưu thành công dưới tên {filename}")

# Dữ liệu mẫu để điền vào template
data = [
    ["Sản phẩm A", "Miền bắc", "1200"],
    ["Sản phẩm B", "Miền nam", "1300"],
    ["Sản phẩm C", "Miền tây", "1100"],
]

# Điền dữ liệu vào template
fill_pdf_template(data)

... (phần còn tiếp tục tương tự với việc dịch các đoạn khác của tài liệu).
1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Tạo PDF bằng ReportLab
Tạo PDF bằng ReportLab
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION