Menu

Tự động hóa gửi báo cáo Excel hàng tuần bằng Python và Outlook: Hướng dẫn chi tiết

Quế Sĩ Duy 22/03/2026 22:12 491 lượt xem 1 trả lời

Chào mọi người,

Dạo gần đây mình có nhận được yêu cầu tự động hóa việc gửi báo cáo Excel định kỳ hàng tuần. Sau một hồi tìm hiểu, mình đã tìm ra cách kết hợp Python với Outlook để làm việc này một cách hiệu quả. Mình muốn chia sẻ lại với mọi người để ai có nhu cầu thì tham khảo nhé.

Mục tiêu: Tự động gửi file báo cáo Excel (đã được xử lý và cập nhật bằng Python) qua email bằng Outlook vào một thời điểm cố định hàng tuần.

Công cụ cần chuẩn bị:

  • Python đã cài đặt
  • Thư viện pywin32 (dùng để tương tác với Outlook)

Các bước thực hiện:

  1. Cài đặt thư viện: Mở Command Prompt hoặc Terminal và chạy lệnh: pip install pywin32
  2. Viết script Python:
import win32com.client as win32
import os

def send_excel_report(recipient_email, subject, body_text, attachment_path):
    try:
        outlook = win32.Dispatch('Outlook.Application')
        message = outlook.CreateItem(0) # 0 represents an email item

        message.To = recipient_email
        message.Subject = subject
        message.Body = body_text

        # Attach the Excel file
        if os.path.exists(attachment_path):
            message.Attachments.Add(attachment_path)
        else:
            print(f"File attachment not found: {attachment_path}")
            return

        message.Send() # or message.Display() to preview before sending
        print(f"Email sent successfully to {recipient_email}")

    except Exception as e:
        print(f"An error occurred: {e}")

# --- Thông tin email ---
recipient = "nguoi_nhan@example.com"
email_subject = "Báo cáo Excel Tuần"
email_body = "Kính gửi anh/chị,

Đây là báo cáo Excel tuần.

Trân trọng,
[Tên của bạn]"
excel_file = "C:\\Path\\To\\Your\\Report.xlsx"

send_excel_report(recipient, email_subject, email_body, excel_file)

Lưu ý:

  • Bạn cần thay thế "C:\\Path\\To\\Your\\Report.xlsx" bằng đường dẫn thực tế đến file báo cáo Excel của bạn.
  • Nếu bạn muốn xem trước email trước khi gửi, hãy thay message.Send() bằng message.Display().
  • Để tự động hóa việc gửi theo lịch trình, bạn có thể sử dụng Task Scheduler của Windows.

Hy vọng chia sẻ này hữu ích cho mọi người. Nếu có ai có kinh nghiệm hay cách làm khác, đừng ngần ngại chia sẻ nhé!

5

Hay quá bạn ơi! Mình cũng đang tìm cách tự động hóa mấy cái báo cáo lặp đi lặp lại này. Đoạn code bạn chia sẻ có vẻ rất hữu ích. Cho mình hỏi thêm là nếu mình muốn gửi kèm nhiều file báo cáo khác nhau trong một email thì có phức tạp lắm không?

2

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

Đăng nhập Đăng ký