Python Excel Automation with Pandas and Openpyxl

Excel files organize data hierarchically: a workbook contains multiple sheets, each sheet comprises cells, and cells hold data with customizable properties like fonts, alignment, and conditional formatting.

Automation Workflow

Automation process: 1. Task decomposition 2. Code implementation per step 3. Code integration 4. Validation 5. Scheduled execution1. Decompose reporting tasks in to discrete steps 2. Implement Python solutions for each step 3. Integrate modular code in to unified script 4. Validate output accuracy 5. Schedule automatic execution

Automation replaces manual processes with machine-executable code for repetitive tasks.

Practical Implmeentation

Daily sales report automation demonstrating key metrics, regional performance, and trends:

Key Metrics Calculation

import pandas as pd

sales_data = pd.read_excel('sales_records.xlsx')

def calculate_metrics(target_date):
    orders_created = sales_data[sales_data['creation_date'] == target_date]['order_id'].count()
    orders_paid = sales_data[sales_data['payment_date'] == target_date]['order_id'].count()
    orders_received = sales_data[sales_data['delivery_date'] == target_date]['order_id'].count()
    orders_returned = sales_data[sales_data['return_date'] == target_date]['order_id'].count()
    return orders_created, orders_paid, orders_received, orders_returned

# Generate comparison metrics
metrics_df = pd.DataFrame(
    [calculate_metrics('2023-05-15'), 
     calculate_metrics('2023-05-14'),
     calculate_metrics('2023-05-08')],
    columns=['Created', 'Paid', 'Delivered', 'Returned'],
    index=['Current', 'Previous', 'Year_Ago']
).T

metrics_df['Day_Change'] = metrics_df['Current'] / metrics_df['Previous'] - 1
metrics_df['Year_Change'] = metrics_df['Current'] / metrics_df['Year_Ago'] - 1

Formatting with Openpyxl

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill

report_workbook = Workbook()
active_sheet = report_workbook.active

# Apply styling templates
header_style = Font(name='Arial', size=12, bold=True, color="FFFFFF")
cell_style = Font(name='Arial', size=11)
border_config = Border(
    left=Side(style='thin'), 
    right=Side(style='thin'),
    top=Side(style='thin'), 
    bottom=Side(style='thin')
)
highlight_fill = PatternFill(fgColor="FF9900", fill_type="solid")

# Implement formatting
for row in active_sheet.iter_rows(min_row=1, max_row=6):
    for cell in row:
        cell.font = cell_style
        cell.alignment = Alignment(horizontal="center")
        cell.border = border_config

active_sheet['A1'].font = header_style
active_sheet['A1'].fill = highlight_fill

report_workbook.save('formatted_report.xlsx')

Regional Sales Analysis

regional_sales = (
    sales_data[sales_data['creation_date'] == '2023-05-15']
    .groupby('region')['order_id']
    .count()
    .reset_index()
    .sort_values('order_id', ascending=False)
    .rename(columns={'order_id': 'regional_orders'})
)

Trend Visualization

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
sales_data.groupby('creation_date')['order_id'].count().plot()
plt.title('Daily Order Trends: May 1-15, 2023')
plt.savefig('order_trends.png')

# Embed in Excel
from openpyxl.drawing.image import Image
trend_image = Image('order_trends.png')
active_sheet.add_image(trend_image, 'D2')

Multi-Sheet Export

from openpyxl import Workbook

multi_sheet_book = Workbook()
del multi_sheet_book['Sheet']  # Remove default sheet

# Create dedicated sheets
metrics_sheet = multi_sheet_book.create_sheet("Performance_Metrics")
regions_sheet = multi_sheet_book.create_sheet("Regional_Analysis")
trends_sheet = multi_sheet_book.create_sheet("Historical_Trends")

# Populate each sheet with respective data
trends_sheet.add_image(Image('order_trends.png'), 'A1')
multi_sheet_book.save('consolidated_report.xlsx')

Tags: Pandas openpyxl excel-automation data-visualization Python-Libraries

Posted on Thu, 08 Oct 2026 16:04:19 +0000 by crabfinger