Chào các bạn, dạo này mình thấy các bài chia sẻ về tự động hóa bằng Python trên diễn đàn rất hay, đặc biệt là các bài liên quan đến Excel. Mình cũng đang áp dụng Python để tự động hóa một số tác vụ và hôm nay muốn chia sẻ với mọi người một kịch bản nhỏ nhưng khá hữu ích: tự động gửi báo cáo Excel qua email hàng ngày.
Công việc của mình có một báo cáo cần gửi cho sếp mỗi sáng. Thay vì phải mở file, lưu lại rồi gửi thủ công, mình đã viết một đoạn script Python để làm hết việc này.
Ý tưởng chính:
- Tạo hoặc cập nhật file báo cáo Excel (có thể dùng thư viện
pandashoặcopenpyxl). - Lưu file báo cáo.
- Sử dụng thư viện
smtplibvàemailđể soạn và gửi email. - Thiết lập lịch chạy tự động bằng Task Scheduler (Windows) hoặc cron job (Linux/macOS).
Code minh họa (sử dụng thư viện pandas và smtplib):
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
# --- Phần 1: Tạo hoặc cập nhật file Excel ---
# Giả sử bạn có dữ liệu dạng dictionary
data = {'Column1': [1, 2, 3], 'Column2': ['A', 'B', 'C']}
df = pd.DataFrame(data)
file_name = 'bao_cao_hang_ngay.xlsx'
df.to_excel(file_name, index=False)
# --- Phần 2: Gửi email ---
email_sender = 'your_email@gmail.com'
email_password = 'your_app_password'
email_receiver = 'recipient_email@example.com'
subject = 'Báo cáo hàng ngày'
body = 'File báo cáo đính kèm.'
msg = MIMEMultipart()
msg['From'] = email_sender
msg['To'] = email_receiver
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
# Đính kèm file
with open(file_name, 'rb') as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename= {file_name}',
)
msg.attach(part)
# Kết nối tới server Gmail và gửi email
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email_sender, email_password)
text = msg.as_string()
server.sendmail(email_sender, email_receiver, text)
server.quit()
print('Email sent successfully!')
except Exception as e:
print(f'Error sending email: {e}')
Lưu ý:
- Bạn cần thay thế
'your_email@gmail.com','your_app_password'(lấy mật khẩu ứng dụng từ cài đặt bảo mật tài khoản Google của bạn), và'recipient_email@example.com'bằng thông tin thực tế. - Thư viện
pandascần được cài đặt:pip install pandas openpyxl
Hy vọng chia sẻ này giúp ích cho các bạn đang muốn tự động hóa công việc với Excel. Nếu có câu hỏi hoặc cách làm khác hay hơn, mọi người cùng thảo luận nhé!