1. Zautomatyzowane raporty
Witaj w świecie automatyzacji raportów! Jeśli kiedykolwiek marzyłeś o tym, żeby tworzenie raportów było tak proste jak naciśnięcie jednego przycisku, to dobrze trafiłeś. Dziś nauczymy się tworzyć zautomatyzowane raporty przy użyciu szablonów. Porozmawiamy o tym, jak zoptymalizować ten proces, aby uniknąć rutyny i sprawić, by twoje raporty były tak dobre, jak najlepszy skrypt w Pythonie.
Dlaczego szablony?
Nikt nie lubi zajmować się nudną, monotonną pracą, szczególnie kiedy chodzi o raporty. A co jeśli każdy raport mógłby być generowany automatycznie, przyjmując dane i wstawiając je do wcześniej określonego formatu? Szablony pozwalają nam stworzyć podstawową strukturę, którą można wielokrotnie wykorzystać, wypełniając nowymi danymi. Oszczędza to czas i nerwy, a dodatkowo sprawia, że raporty są stabilne i estetyczne.
Zalety używania szablonów:
- Szybkość i efektywność: Gotowy szablon pozwala tworzyć raporty szybciej niż kiedykolwiek.
- Jednolity styl: Wszystkie raporty mają ten sam styl, co ułatwia czytanie i wygląda profesjonalnie.
- Minimalizowanie błędów: Sprawdzona struktura minimalizuje błędy formatowania.
- Łatwość modyfikacji: Zmiany w szablonie stosują się do wszystkich raportów, co upraszcza ich utrzymanie.
2. Tworzenie prostego szablonu raportu
Podstawowe elementy szablonów PDF w ReportLab
Do tworzenia szablonów raportów w ReportLab można użyć następujących podstawowych elementów:
- Tekst i nagłówki: używaj elementów tekstowych do tworzenia tytułów, podtytułów i treści.
- Tabele: do prezentacji danych w formie tabel.
- Elementy graficzne: linie, prostokąty, koła i inne kształty dla wizualnego układu.
- Obrazy: dodawanie logotypów i innych grafik dla profesjonalnego wyglądu.
Tworzenie szablonu używając SimpleDocTemplate
W ReportLab klasa SimpleDocTemplate
pozwala tworzyć PDF z wcześniej określoną
strukturą. Ta klasa wspiera dodawanie tekstu, tabel i innych elementów przy użyciu listy
elements
, co upraszcza tworzenie uporządkowanych dokumentów.
Tworzenie szablonu PDF-raportu z tekstem i tabelą
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
# Funkcja do tworzenia szablonu raportu
def create_pdf_template(filename="report_template.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Nagłówek raportu
title_style = ParagraphStyle(
"TitleStyle",
parent=styles["Title"],
fontSize=20,
textColor=colors.darkblue,
alignment=1,
spaceAfter=20,
)
title = Paragraph("Szablon raportu o sprzedaży", title_style)
elements.append(title)
# Podtytuł
subtitle_style = ParagraphStyle(
"SubtitleStyle",
parent=styles["Heading2"],
fontSize=14,
textColor=colors.gray,
alignment=1,
spaceAfter=10,
)
subtitle = Paragraph("Raport kwartalny", subtitle_style)
elements.append(subtitle)
# Tekst wstępu
intro_text = """
Ten szablon raportu został zaprojektowany, aby przedstawić dane sprzedażowe według regionów i kategorii produktów.
Dane aktualizują się automatycznie, co pozwala używać szablonu do regularnych raportów.
"""
elements.append(Paragraph(intro_text, styles["BodyText"]))
elements.append(Spacer(1, 20))
# Tabela danych
table_data = [["Kategoria", "Region", "Sprzedaż"]]
# Przykładowe dane do tabeli (zostaną zastąpione dynamicznymi danymi)
sample_data = [["Produkty A", "Północ", "1200"], ["Produkty B", "Południe", "1300"], ["Produkty C", "Zachód", "1100"]]
table_data.extend(sample_data)
# Stylizacja tabeli
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)
# Zapisanie PDF
doc.build(elements)
print(f"Szablon raportu został pomyślnie zapisany jako {filename}")
# Tworzenie szablonu raportu
create_pdf_template()
Wyjaśnienie kodu
- Nagłówek i podtytuł: Użyto stylów
TitleStyle
iSubtitleStyle
do formatowania nagłówka i podtytułu, co sprawia, że są one czytelne i wyróżnione wizualnie. - Tekst główny: Tekst wyjaśnia, że raport jest szablonem przeznaczonym do automatyzacji raportowania.
- Tablica: Tablica służy jako struktura do wypełnienia danymi. Przykładowe dane
(
sample_data
) można zastąpić rzeczywistymi wartościami podczas generowania raportu. - Zapis:
SimpleDocTemplate
zapisuje PDF do plikureport_template.pdf
.
3. Wypełnianie szablonu danymi
Automatyczne wypełnianie szablonu danymi
Teraz, gdy mamy podstawowy szablon, możemy stworzyć funkcję, która przyjmuje dane i automatycznie wypełnia tabelę. To przydatne do tworzenia raportów, gdzie dane pochodzą z bazy danych, API lub pliku.
Funkcja do automatycznego wypełniania szablonu
def fill_pdf_template(data, filename="filled_report.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Nagłówek raportu
title = Paragraph("Raport o sprzedaży", styles["Title"])
elements.append(title)
# Podtytuł
subtitle = Paragraph("Dane o sprzedaży za podany okres", styles["Heading2"])
elements.append(subtitle)
elements.append(Spacer(1, 20))
# Dynamiczne wypełnienie tabeli danymi
table_data = [["Kategoria", "Region", "Sprzedaż"]] + data
table = Table(table_data)
# Zastosowanie stylów do tabeli
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)
# Zapisanie PDF
doc.build(elements)
print(f"Raport został pomyślnie zapisany jako {filename}")
# Przykładowe dane do wypełnienia szablonu
data = [
["Produkty A", "Północ", "1200"],
["Produkty B", "Południe", "1300"],
["Produkty C", "Zachód", "1100"],
]
# Wypełnienie szablonu danymi
fill_pdf_template(data)
GO TO FULL VERSION