Chào các bạn trong diễn đàn,
Dạo này mình thấy các bài viết về tự động hóa bằng Python trên diễn đàn mình rất hay, đặc biệt là các bài xử lý file Excel. Hôm nay, mình muốn chia sẻ một mẹo nhỏ mà mình hay dùng để tiết kiệm thời gian khi cần tạo ra nhiều file Excel mới dựa trên một file mẫu (template).
Ví dụ, công ty mình thường xuyên phải tạo các báo cáo tuần/tháng cho từng khách hàng khác nhau. Thay vì mở file template rồi copy-paste thông tin, mình viết một đoạn script Python nhỏ để tự động làm việc này. Script sẽ lấy thông tin tên khách hàng từ một file Excel khác, sau đó lần lượt tạo ra các file Excel mới dựa trên template đã có, đồng thời điền tên khách hàng vào một ô nhất định trong file mới.
Đây là đoạn code minh họa đơn giản:
import openpyxl
import os
# Đường dẫn đến file template và thư mục lưu file mới
template_path = 'template.xlsx'
output_dir = 'reports'
# Đảm bảo thư mục lưu file tồn tại
os.makedirs(output_dir, exist_ok=True)
# Tải template
template_wb = openpyxl.load_workbook(template_path)
template_sheet = template_wb.active
# Giả sử tên khách hàng nằm trong cột A của file 'customers.xlsx'
customers_wb = openpyxl.load_workbook('customers.xlsx')
customers_sheet = customers_wb.active
# Lặp qua từng tên khách hàng
for row in customers_sheet.iter_rows(min_row=2, values_only=True):
customer_name = row[0] # Lấy tên khách hàng từ cột đầu tiên
# Tạo tên file mới
new_filename = f"BaoCao_{customer_name}.xlsx"
new_filepath = os.path.join(output_dir, new_filename)
# Ghi tên khách hàng vào ô B1 của template (ví dụ)
template_sheet['B1'] = customer_name
# Lưu file mới
template_wb.save(new_filepath)
print(f"Đã tạo file: {new_filepath}")
print("Hoàn thành!")Lưu ý:
- Bạn cần cài đặt thư viện
openpyxlbằng lệnh:pip install openpyxl - Thay đổi
template.xlsx,customers.xlsxvà các ô/cột cho phù hợp với nhu cầu của bạn. - Script này chỉ là ví dụ cơ bản, bạn có thể mở rộng để điền nhiều dữ liệu khác vào template.
Hy vọng chia sẻ này hữu ích cho các bạn đang làm việc với Excel và muốn tự động hóa các tác vụ lặp đi lặp lại. Nếu có câu hỏi hoặc cách làm hay hơn, mọi người cùng thảo luận nhé!