📗 BÀI 1: TỰ ĐỘNG GỘP DỮ LIỆU TỪ NHIỀU FILE EXCEL VÀO MỘT FILE DUY NHẤT

🎯 1. Mục tiêu bài học

  • Hiểu rõ nguyên lý hoạt động của thư viện pandas khi 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 file Ket_Qua_Tong_Hop.xlsx duy 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ện pandas để “đọ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.
STTNgayMa_Don_HangSan_PhamSo_LuongDon_GiaMien
12026-07-01DH001Laptop Dell215000000Bac
22026-07-01DH002Chuot Logitech10250000Bac
32026-07-02DH003Ban Phim Co51200000Bac
42026-07-02DH004Man Hinh Asus33500000Bac
52026-07-03DH005Tai Nghe Sony42000000Bac
62026-07-01DH006iPhone 15122000000Trung
72026-07-01DH007Op Lung20150000Trung
82026-07-02DH008Sac Du Phong8500000Trung
92026-07-02DH009Cap Sac Type-C15100000Trung
102026-07-03DH010Loa Bluetooth21800000Trung
112026-07-01DH011May In Canon14500000Nam
122026-07-01DH012Giay In A45065000Nam
132026-07-02DH013Muc In5300000Nam
142026-07-02DH014O Cung SSD121200000Nam
152026-07-03DH015USB 64GB25180000Nam

🛠️ 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:

  1. Mở ứng dụng Terminal (trên Mac) hoặc Command Prompt (trên Windows).
  2. Nhập dòng lệnh sau và nhấn Enter:Bashpip install pandas openpyxl Giải thích: pandas là thư viện xử lý dữ liệu dạng bảng hàng đầu của Python, còn openpyxl là “động cơ” giúp Python có thể đọc và ghi được định dạng file .xlsx củ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=True giú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ền index=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ệnTừ 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ácDễ 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ụngChu 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_Thang có 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ư .txt hoặ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ện if của vòng lặp for để lọc bỏ các file không hợp lệ trước khi thực hiện lệnh pd.read_excel().
Scroll to Top