Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa tạo báo cáo hàng tháng bằng Python: Hướng dẫn gửi email kèm file đính kèm

Châu Hòa Tuyết 16/03/2026 02:46 533 lượt xem 3 trả lời

Chào các bác, dạo này em đang tìm hiểu về Python để tự động hóa mấy cái báo cáo lặp đi lặp lại ở công ty. Thấy chuyên mục Tin học mở rộng có nhiều bài hay quá, em cũng mạnh dạn chia sẻ một chút kinh nghiệm cá nhân về việc tự động hóa gửi báo cáo hàng tháng qua email.

Cái này thì không mới, có lẽ nhiều bác đã dùng VBA hay Power Automate rồi. Nhưng hôm nay em muốn giới thiệu cách làm bằng Python, nó khá linh hoạt và mạnh mẽ, đặc biệt khi các bác cần xử lý dữ liệu phức tạp trước khi gửi.

Mục tiêu: Tự động tạo báo cáo (ví dụ: file Excel, PDF) và gửi email đính kèm cho người nhận vào cuối mỗi tháng.

Công cụ cần dùng:

  • Python 3.x
  • Thư viện pandas (để xử lý dữ liệu, tạo file Excel)
  • Thư viện smtplibemail (để gửi email)

Các bước chính:

  1. Tạo báo cáo: Sử dụng pandas để đọc dữ liệu, xử lý, tổng hợp và lưu thành file Excel (hoặc định dạng khác tùy nhu cầu). Ví dụ, nếu cần tạo file Excel:
    import pandas as pd
    
    df = pd.read_csv('data.csv')
    # ... xử lý dữ liệu ...
    report_file = 'bao_cao_thang.xlsx'
    df.to_excel(report_file, index=False)
  2. Chuẩn bị nội dung email: Tạo tiêu đề, nội dung email. Có thể lấy tên file báo cáo động theo tháng.
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.mime.base import MIMEBase
    from email import encoders
    import datetime
    
    now = datetime.datetime.now()
    thang_hien_tai = now.strftime('%m/%Y')
    
    msg = MIMEMultipart()
    msg['From'] = 'your_email@gmail.com'
    msg['To'] = 'recipient@example.com'
    msg['Subject'] = f'Bao cao thang {thang_hien_tai}'
    
    body = "Kinh gui anh/chi, 
    
    Xin vui long xem file bao cao dinh kem. 
    
    Trân trọng,"
    msg.attach(MIMEText(body, 'plain'))
  3. Đính kèm file báo cáo:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(report_file, 'rb').read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', f'attachment; filename= {report_file}')
msg.attach(part)
  • Gửi email: Sử dụng smtplib để kết nối đến server email và gửi. Lưu ý bật chế độ 'less secure app access' hoặc tạo mật khẩu ứng dụng cho Gmail.
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login('your_email@gmail.com', 'your_password')
    text = msg.as_string()
    server.sendmail('your_email@gmail.com', 'recipient@example.com', text)
    server.quit()
  • Các bác có thể kết hợp thêm schedule hoặc APScheduler để lên lịch chạy tự động script này vào thời điểm mong muốn. Em thấy cách này rất tiện, đỡ phải thao tác thủ công nhiều.

    Có bác nào có kinh nghiệm hay cách làm khác hay hơn không, chia sẻ cho em học hỏi với ạ!

    1

    Chào bạn, bài viết của bạn rất hay và đúng với nhu cầu của nhiều anh em đang tìm cách tự động hóa công việc với Excel.

    Mình cũng đang muốn tìm hiểu sâu hơn về Python cho Excel, không biết bạn có thể chia sẻ thêm về các thư viện Python nào hỗ trợ xử lý file Excel (như đọc, ghi, định dạng) mà bạn thường dùng không? Đặc biệt là những thư viện giúp thao tác dữ liệu phức tạp trước khi gửi email ấy.

    Cảm ơn bạn đã chia sẻ!

    4

    Hay quá bác ơi! Cách bác dùng Python để tự động hóa gửi báo cáo qua email này đúng là giải pháp tuyệt vời cho các tác vụ lặp đi lặp lại.

    Em cũng đang "mày mò" Python cho công việc, nhất là mảng xử lý dữ liệu. Ngoài thư viện pandas mà em thấy rất phổ biến, không biết bác còn gợi ý thêm thư viện nào khác để xử lý các file Excel phức tạp hơn không ạ? Ví dụ như đọc nhiều sheet cùng lúc, hay xử lý các định dạng đặc biệt chẳng hạn.

    Rất mong được bác chia sẻ thêm kinh nghiệm!

    1

    Cái vụ tự động hóa báo cáo bằng Python này hay quá bác ạ! Em cũng đang "ngâm cứu" mấy cái báo cáo lặp đi lặp lại bên em, cứ đến tháng là lại mất cả ngày làm thủ công. Bài viết của bác đúng là mở ra một hướng đi mới.

    Bác có thể chia sẻ thêm một chút về cách bác xử lý dữ liệu phức tạp trước khi gửi email không? Kiểu như nếu dữ liệu nguồn có nhiều file Excel, hay cần tổng hợp từ nhiều nguồn khác nhau thì Python có "cân" được không ạ? Em đang tò mò vụ này lắm!

    Cảm ơn bác đã chia sẻ!

    Hay quá bác ơi! Cách bác dùng Python để tự động hóa gửi báo cáo qua email này đúng là giải pháp tuyệt vời cho các tác vụ lặp đi lặp lại.

    Em cũng đang "mày mò" Python cho công việc, nhất là mảng xử lý dữ liệu. Ngoài thư viện pandas mà em thấy rất phổ biến, không biết bác còn gợi ý thêm thư viện nào khác để xử lý các file Excel phức tạp hơn không ạ? Ví dụ như đọc nhiều sheet cùng lúc, hay xử lý các định dạng đặc biệt chẳng hạn.

    Rất mong được bác chia sẻ thêm kinh nghiệm!

    2

    Bạn cần đăng nhập để trả lời chủ đề này.

    Đăng nhập Đăng ký