
🎯 1. Mục tiêu bài học
- Hiểu rõ nguyên lý hoạt động của thư viện
pandaskhi tương tác ngầm với các tệp tin Excel. - Xây dựng thành công đoạn mã Python có khả năng quét tự động một thư mục và gộp hàng chục, hàng trăm file Excel thành một bảng duy nhất trong vài giây.
- Giải phóng hoàn toàn thời gian xử lý các tác vụ copy-paste thủ công lặp đi lặp lại hàng tháng.
💼 2. Tình huống thực tế & Giải pháp
- 📌 Tình huống: Cuối tháng, bạn nhận được 3 file báo cáo doanh thu độc lập từ 3 miền:
Bac.xlsx,Trung.xlsx,Nam.xlsx. Các file này có cấu trúc cột hoàn toàn giống nhau nhưng nằm rời rạc. Sếp yêu cầu bạn gộp lại thành một fileKet_Qua_Tong_Hop.xlsxduy nhất để làm báo cáo tổng. - ⚠️ Cách làm thủ công: Mở từng file $\rightarrow$ Bôi đen dữ liệu $\rightarrow$ Copy $\rightarrow$ Mở file tổng $\rightarrow$ Paste. Quy trình này tốn thời gian, dễ gây nhầm lẫn hoặc sót dòng nếu số lượng file tăng lên hàng chục.
- 🚀 Giải pháp Python: Sử dụng thư viện
osđể tự động thu thập tất cả các file có trong thư mục và thư việnpandasđể “đọc ngầm” rồi nối chồng dữ liệu lên nhau một cách chính xác tuyệt đối.
📊 3. File dữ liệu mẫu (Data Mockup)
Học viên tiến hành tạo một thư mục trên máy tính có tên là BaoCao_Thang. Sau đó, tạo ra 3 file Excel riêng biệt với nội dung được chia ra từ bảng 15 dòng dưới đây:
- File
Bac.xlsx: Gồm dữ liệu từ dòng 1 đến dòng 5. - File
Trung.xlsx: Gồm dữ liệu từ dòng 6 đến dòng 10. - File
Nam.xlsx: Gồm dữ liệu từ dòng 11 đến dòng 15.
| STT | Ngay | Ma_Don_Hang | San_Pham | So_Luong | Don_Gia | Mien |
| 1 | 2026-07-01 | DH001 | Laptop Dell | 2 | 15000000 | Bac |
| 2 | 2026-07-01 | DH002 | Chuot Logitech | 10 | 250000 | Bac |
| 3 | 2026-07-02 | DH003 | Ban Phim Co | 5 | 1200000 | Bac |
| 4 | 2026-07-02 | DH004 | Man Hinh Asus | 3 | 3500000 | Bac |
| 5 | 2026-07-03 | DH005 | Tai Nghe Sony | 4 | 2000000 | Bac |
| 6 | 2026-07-01 | DH006 | iPhone 15 | 1 | 22000000 | Trung |
| 7 | 2026-07-01 | DH007 | Op Lung | 20 | 150000 | Trung |
| 8 | 2026-07-02 | DH008 | Sac Du Phong | 8 | 500000 | Trung |
| 9 | 2026-07-02 | DH009 | Cap Sac Type-C | 15 | 100000 | Trung |
| 10 | 2026-07-03 | DH010 | Loa Bluetooth | 2 | 1800000 | Trung |
| 11 | 2026-07-01 | DH011 | May In Canon | 1 | 4500000 | Nam |
| 12 | 2026-07-01 | DH012 | Giay In A4 | 50 | 65000 | Nam |
| 13 | 2026-07-02 | DH013 | Muc In | 5 | 300000 | Nam |
| 14 | 2026-07-02 | DH014 | O Cung SSD | 12 | 1200000 | Nam |
| 15 | 2026-07-03 | DH015 | USB 64GB | 25 | 180000 | Nam |
🛠️ 4. Hướng dẫn thực hành cầm tay chỉ việc
🔹 Bước 1: Chuẩn bị môi trường & Cài đặt thư viện
Trước khi viết code, bạn cần cài đặt hai công cụ cốt lõi để làm việc với Excel:
- Mở ứng dụng Terminal (trên Mac) hoặc Command Prompt (trên Windows).
- Nhập dòng lệnh sau và nhấn Enter:Bash
pip install pandas openpyxlGiải thích:pandaslà thư viện xử lý dữ liệu dạng bảng hàng đầu của Python, cònopenpyxllà “động cơ” giúp Python có thể đọc và ghi được định dạng file.xlsxcủa Excel.
🔹 Bước 2: Viết mã nguồn Python
Tạo một file Python mới (hoặc mở một ô code trong Jupyter Notebook) nằm cùng cấp thư mục với thư mục BaoCao_Thang, sau đó nhập đoạn code dưới đây:
Python
import os
import pandas as pd
# 1. Định nghĩa đường dẫn tới thư mục chứa các file báo cáo chi nhánh
thu_muc_nguon = "BaoCao_Thang/"
# 2. Khởi tạo một danh sách rỗng để lưu trữ các bảng dữ liệu sau khi đọc
tieu_bang_list = []
print("🔄 Bắt đầu quét thư mục dữ liệu...")
# 3. Sử dụng vòng lặp duyệt qua từng file trong thư mục target
for ten_file in os.listdir(thu_muc_nguon):
# Chỉ xử lý các file có đuôi mở rộng là .xlsx hoặc .xls
if ten_file.endswith(".xlsx") or ten_file.endswith(".xls"):
# Tạo đường dẫn chính xác tuyệt đối dẫn tới file
duong_dan_file = os.path.join(thu_muc_nguon, ten_file)
print(f" 📂 Đang đọc file: {ten_file}")
# Đọc nội dung file Excel vào bộ nhớ tạm (gọi là DataFrame)
df = pd.read_excel(duong_dan_file)
# Tạo thêm 1 cột phụ để ghi nhận nguồn gốc dữ liệu từ file nào
df["Nguon_File"] = ten_file
# Thêm DataFrame vừa đọc vào danh sách tổng
tieu_bang_list.append(df)
# 4. Kiểm tra xem danh sách có dữ liệu hay không trước khi gộp
if len(tieu_bang_list) > 0:
# Nối tất cả các bảng dữ liệu lại theo trục dọc (xếp chồng lên nhau)
df_tong_hop = pd.concat(tieu_bang_list, ignore_index=True)
# 5. Xuất dữ liệu đã gộp ra một file Excel tổng hợp mới
file_dau_ra = "Ket_Qua_Tong_Hop.xlsx"
df_tong_hop.to_excel(file_dau_ra, index=False)
print("---")
print(f"🎉 THÀNH CÔNG! File tổng hợp đã được lưu tại: {file_dau_ra}")
else:
print("❌ Thất bại: Không tìm thấy file Excel nào trong thư mục!")
💡 Giải thích mã nguồn chi tiết cho dân văn phòng:
os.listdir(): Giống như hành động bạn mở một folder bằng chuột để xem danh sách các file đang hiển thị.pd.read_excel(): Thay vì click đúp chuột mở cửa sổ ứng dụng Excel tốn tài nguyên, Python sẽ “đọc ngầm” toàn bộ bảng tính vào RAM máy tính.df['Nguon_File'] = ten_file: Thao tác này giúp bạn đóng dấu bản quyền cho dữ liệu. Khi gộp lại, bạn sẽ luôn biết dòng doanh thu đó thuộc về file của miền nào gửi lên.pd.concat(..., ignore_index=True): Đóng vai trò như lệnh Sao chép $\rightarrow$ Dán nối đuôi. Tham sốignore_index=Truegiúp tạo lại số thứ tự dòng chạy liên tục từ 1 đến hết, loại bỏ chỉ số cũ của các file thành phần.to_excel(..., index=False): Xuất file. Điềnindex=Falseđể Excel không tự động chèn thêm một cột số thứ tự mặc định của Python vào file của bạn.
📉 5. Đánh giá hiệu quả khi áp dụng bài giảng
| 📊 Tiêu chí | 📋 Sao chép thủ công (Excel truyền thống) | 🤖 Tự động hóa bằng Python | 🏆 Hiệu quả thực tế |
| Thời gian thực hiện | Từ 5 đến 15 phút (tùy thuộc vào tốc độ mở file và số lượng file). | Chưa đầy 2 giây (bất kể thư mục chứa 3 file hay 300 file). | Tăng tốc ngoạn mục. Tiết kiệm hơn 95% thời gian chờ đợi. |
| Độ chính xác | Dễ xảy ra lỗi copy thiếu dòng, paste đè dữ liệu hoặc sót file. | Đọc chính xác 100% dữ liệu theo cấu trúc lập trình sẵn. | An toàn tuyệt đối. Loại bỏ hoàn toàn sai sót do con người (human error). |
| Khả năng tái sử dụng | Chu kỳ lặp lại vào tháng sau: Bạn phải thực hiện lại toàn bộ quy trình từ đầu. | Tháng sau chỉ cần bỏ file mới vào folder và nhấn nút Run. | Tính bền vững cao. Viết một lần, áp dụng lâu dài cho toàn bộ sự nghiệp. |
📝 6. Bài tập mở rộng tự thực hành cho học viên
- 💪 Đề bài tập: Giả sử trong thư mục
BaoCao_Thangcó một số file nháp của nhân viên vô tình lưu dưới dạng định dạng khác như.txthoặc.csv. Hãy nâng cấp đoạn code trên để Python thông minh hơn: Chỉ chọn gộp đúng những file có tên bắt đầu bằng chữ"BaoCao_"và bỏ qua tất cả các file khác để tránh làm bẩn dữ liệu file tổng. - 💡 Hướng dẫn gợi ý: Học viên sử dụng hàm kiểm tra chuỗi ký tự
.startswith("BaoCao_")lồng vào trong điều kiệnifcủa vòng lặpforđể lọc bỏ các file không hợp lệ trước khi thực hiện lệnhpd.read_excel().