Menu

Tự động hóa gửi báo cáo Excel hàng ngày bằng Python

Đậu Phương Trường 06/06/2026 14:00 298 lượt xem 2 trả lời

Chào mọi người,

Dạo này công việc của mình liên quan nhiều đến việc gửi báo cáo Excel tự động hàng ngày. Mình đã thử một vài cách và muốn chia sẻ lại với mọi người một phương pháp khá hiệu quả, sử dụng Python để tự động hóa việc này.

Ý tưởng:

  • Tự động lấy dữ liệu mới nhất từ một file Excel nguồn.
  • Xử lý, định dạng dữ liệu theo yêu cầu.
  • Tạo một file Excel báo cáo mới hoặc cập nhật file báo cáo hiện có.
  • Gửi file báo cáo này qua email tự động vào một thời điểm nhất định trong ngày.

Công cụ sử dụng:

  • Python: Ngôn ngữ chính để viết script.
  • Pandas: Thư viện mạnh mẽ để đọc, xử lý và thao tác dữ liệu Excel.
  • smtplib & email: Thư viện tích hợp sẵn của Python để gửi email.

Ví dụ code (đơn giản hóa):

import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

# Thông tin email
email_sender = 'your_email@gmail.com'
email_password = 'your_app_password'
email_receiver = 'receiver_email@example.com'

# Đọc file Excel nguồn
df = pd.read_excel('data_source.xlsx')

# Xử lý dữ liệu (ví dụ: chỉ lấy các dòng có giá trị 'Hoàn thành')
report_data = df[df['Trạng thái'] == 'Hoàn thành']

# Tạo file Excel báo cáo
report_data.to_excel('daily_report.xlsx', index=False)

# Tạo email
msg = MIMEMultipart()
msg['From'] = email_sender
msg['To'] = email_receiver
msg['Subject'] = 'Báo cáo hàng ngày - ' + pd.Timestamp.now().strftime('%Y-%m-%d')

body = "Kính gửi anh/chị, \n\nVui lòng xem file báo cáo đính kèm. \n\nTrân trọng,"
msg.attach(MIMEText(body, 'plain'))

# Đính kèm file báo cáo
filename = 'daily_report.xlsx'

attachment = open(filename, 'rb')

part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= " + filename)

msg.attach(part)

# Gửi email
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls() # Secure the connection
server.login(email_sender, email_password)
text = msg.as_string()
server.sendmail(email_sender, email_receiver, text)
server.quit()

print("Email báo cáo đã được gửi thành công!")

Lưu ý:

  • Bạn cần cài đặt thư viện Pandas: pip install pandas openpyxl
  • Thay thế thông tin email, tên file cho phù hợp.
  • Đối với Gmail, bạn cần bật 'Less secure app access' hoặc tạo 'App password'.
  • Có thể dùng thêm thư viện schedule để lên lịch chạy script tự động.

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

2

Chào bạn,

Cảm ơn bạn đã chia sẻ phương pháp tự động hóa gửi báo cáo Excel bằng Python. Mình cũng đang tìm hiểu về mảng này và thấy cách bạn làm rất hay, đặc biệt là việc tự động lấy dữ liệu và gửi email.

Mình có một chút thắc mắc nhỏ: Bạn thường sử dụng thư viện Python nào để xử lý file Excel và gửi email vậy? Mình đang cân nhắc giữa pandasopenpyxl cho phần xử lý file, còn email thì chắc sẽ dùng smtplib.

Rất mong nhận được chia sẻ thêm từ bạn!

4

Hay quá bạn ơi! Mình cũng đang muốn tìm hiểu sâu hơn về việc tự động hóa bằng Python để đỡ "cày cuốc" mấy vụ báo cáo lặp đi lặp lại. Cách bạn triển khai từ lấy dữ liệu, xử lý đến gửi email nghe rất logic.

Mình tò mò không biết bạn xử lý các định dạng phức tạp trong file Excel nguồn như thế nào khi dùng Python? Có gặp khó khăn gì không, hay có thư viện nào đặc biệt hữu ích cho việc này không bạn?

0

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

Đăng nhập Đăng ký