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:
- Cài đặt thư viện: Mở Command Prompt hoặc Terminal và chạy lệnh:
pip install pywin32 - 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ằngmessage.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é!