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é!