Reports

Generating Reports: HTML, Excel, and PDFs

Introduction

One of the powerful capabilities of Python is its ability to automate the generation of reports in various formats, including HTML, Excel, and PDF. This can be extremely useful for presenting data analysis results, building dashboards, or sharing insights in a user-friendly format. In this post, we will explore how to use Python libraries to generate reports that are both informative and visually appealing.


1. Generating HTML Reports with Python

HTML is a great format for creating dynamic and interactive reports that can be easily shared over the web. Python’s jinja2 library allows us to create HTML reports with dynamic content, while pandas can be used to structure and present data.

Example: Simple HTML Report Using jinja2

First, install jinja2 if you don’t have it already:

bash
Copy code
pip install jinja2

Now let’s create a simple HTML report using a template.

python
Copy code
from jinja2 import Template

# Data for the report
data = {
    "title": "Sales Report",
    "sales": [
        {"month": "January", "revenue": 10000},
        {"month": "February", "revenue": 15000},
        {"month": "March", "revenue": 20000},
    ]
}

# HTML template for the report
html_template = """
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <table border="1">
        <tr>
            <th>Month</th>
            <th>Revenue</th>
        </tr>
        {% for record in sales %}
        <tr>
            <td>{{ record.month }}</td>
            <td>{{ record.revenue }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>
"""

# Create a Template object
template = Template(html_template)

# Render the template with data
html_report = template.render(title=data['title'], sales=data['sales'])

# Write the HTML report to a file
with open("sales_report.html", "w") as file:
    file.write(html_report)

print("HTML report generated successfully!")

In this example:

  • We use jinja2 to fill the data into an HTML template.
  • The result is a simple sales report in HTML format, which can be opened in a web browser.

2. Generating Excel Reports with pandas

Excel files are commonly used in business for reporting, as they allow for easy data manipulation and analysis. Python’s pandas library makes it easy to generate Excel reports with data stored in DataFrames.

Example: Creating an Excel Report

python
Copy code
import pandas as pd

# Sample data for the report
data = {
    "Product": ["A", "B", "C", "D"],
    "Sales": [1200, 1500, 1800, 1300],
    "Profit": [400, 500, 600, 450]
}

# Create a DataFrame
df = pd.DataFrame(data)

# Save the DataFrame to an Excel file
df.to_excel("sales_report.xlsx", index=False)

print("Excel report generated successfully!")

Here:

  • pandas is used to structure the data into a DataFrame.
  • The to_excel() method generates an Excel file. The index=False argument ensures that the DataFrame index is not included in the file.

You can also add multiple sheets, formatting, or charts to Excel using openpyxl for more advanced reporting needs.


3. Generating PDF Reports with ReportLab

PDF is a popular format for generating professional-looking, formatted reports. Python’s ReportLab library allows you to create PDF documents with precise layout control.

Example: Generating a Basic PDF Report

First, install ReportLab:

bash
Copy code
pip install reportlab

Now let’s create a simple PDF report.

python
Copy code
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

# Create a PDF object
pdf_file = "sales_report.pdf"
c = canvas.Canvas(pdf_file, pagesize=letter)

# Title
c.setFont("Helvetica-Bold", 18)
c.drawString(100, 750, "Sales Report")

# Add table headers
c.setFont("Helvetica", 12)
c.drawString(100, 730, "Product")
c.drawString(200, 730, "Sales")
c.drawString(300, 730, "Profit")

# Add data
data = [("A", 1200, 400), ("B", 1500, 500), ("C", 1800, 600), ("D", 1300, 450)]
y_position = 710

for product, sales, profit in data:
    c.drawString(100, y_position, product)
    c.drawString(200, y_position, str(sales))
    c.drawString(300, y_position, str(profit))
    y_position -= 20

# Save the PDF
c.save()

print("PDF report generated successfully!")

In this example:

  • We use ReportLab to create a PDF report with a simple table structure.
  • The drawString() method is used to place text at specific coordinates on the page, allowing you to create formatted reports.

4. Advanced Reporting Techniques

While the examples above cover basic reports, Python offers several advanced techniques and libraries to enhance your reports:

  • Adding charts and graphs to Excel reports using openpyxl or xlsxwriter.
  • Interactive HTML reports with JavaScript using libraries like plotly for embedding interactive plots.
  • Customizing PDF layouts using ReportLab to add images, multi-page documents, and more advanced formatting.

By combining Python’s reporting libraries with the rich capabilities of data analysis tools like pandas, matplotlib, and seaborn, you can automate the generation of reports that include detailed data visualizations and insights.


5. Conclusion

Automating the generation of reports in different formats—HTML, Excel, or PDF—can drastically improve your productivity and streamline your workflows. By leveraging Python’s powerful libraries, you can easily create professional reports that are ready for sharing or further analysis. Whether you’re handling simple data summaries or complex business reports, Python gives you the flexibility to automate the process and tailor it to your needs.