Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa trích xuất dữ liệu từ nhiều file Excel có cấu trúc khác nhau bằng Python

Nông Mộng Tâm 07/04/2026 07:55 527 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình có làm việc với một dự án cần trích xuất dữ liệu từ nhiều file Excel khác nhau, mà cấu trúc của các file này lại không hoàn toàn giống nhau (ví dụ: tên cột có thể khác, thứ tự cột cũng có thể thay đổi). Ban đầu mình định dùng VBA nhưng thấy khá phức tạp. May mắn là mình đã tìm ra cách dùng Python để xử lý việc này một cách khá hiệu quả.

Mình muốn chia sẻ script nhỏ này để mọi người tham khảo, biết đâu lại giúp ích cho ai đó đang gặp tình huống tương tự.

Ý tưởng chính:

  • Sử dụng thư viện pandas để đọc file Excel.
  • Xác định các cột cần lấy dựa trên tên cột (có thể linh hoạt xử lý tên cột hơi khác nhau).
  • Gom dữ liệu từ các file lại thành một DataFrame duy nhất.

Code minh họa (đơn giản hóa):

import pandas as pd
import glob
import os

# Thư mục chứa các file Excel
folder_path = 'duong_dan_toi_thu_muc_excel'

# Các tên cột mong muốn (có thể định nghĩa nhiều tên tương đương)
column_mapping = {
    'Tên Khách Hàng': ['TenKH', 'Customer Name', 'Khách Hàng'],
    'Số Tiền': ['SoTien', 'Amount', 'ThanhTien']
}

all_data = []

# Lấy danh sách tất cả các file .xlsx trong thư mục
excel_files = glob.glob(os.path.join(folder_path, '*.xlsx'))

for file in excel_files:
    try:
        df = pd.read_excel(file)
        
        # Tạo DataFrame tạm để lưu dữ liệu từ file hiện tại
        temp_df = pd.DataFrame()
        
        # Duyệt qua các cột mong muốn và tìm cột tương ứng trong file
        for desired_col, possible_names in column_mapping.items():
            found_col = None
            for name in possible_names:
                if name in df.columns:
                    found_col = name
                    break
            
            if found_col:
                temp_df[desired_col] = df[found_col]
            else:
                # Xử lý trường hợp không tìm thấy cột (ví dụ: thêm cột rỗng)
                temp_df[desired_col] = None 
        
        all_data.append(temp_df)
        
    except Exception as e:
        print(f"Lỗi khi xử lý file {file}: {e}")

# Gom tất cả dữ liệu lại
if all_data:
    final_df = pd.concat(all_data, ignore_index=True)
    
    # Lưu kết quả ra file mới
    final_df.to_excel('ket_qua_tong_hop.xlsx', index=False)
    print("Đã tổng hợp dữ liệu thành công!")
else:
    print("Không có dữ liệu để tổng hợp.")

Lưu ý:

  • Script này cần cài đặt thư viện pandasopenpyxl (hoặc xlrd tùy phiên bản Excel). Cài đặt bằng lệnh: pip install pandas openpyxl
  • Phần column_mapping cần được tùy chỉnh cho phù hợp với tên các cột thực tế trong file của bạn.
  • Có thể thêm các bước xử lý lỗi, lọc dữ liệu, hoặc định dạng khác tùy theo yêu cầu.

Hy vọng chia sẻ này hữu ích cho mọi người. Nếu có ai có cách làm hay hơn hoặc gặp khó khăn, cùng thảo luận nhé!

0

Hay quá bạn ơi! Mình cũng đang đau đầu với việc xử lý mấy file Excel linh tinh đây.

Bạn có thể chia sẻ cụ thể hơn về cách bạn xử lý trường hợp tên cột khác nhau không? Mình đang loay hoay với việc mapping tên cột thủ công, mà file thì nhiều lắm.

Cảm ơn bạn đã chia sẻ nhé!

4

Vụ xử lý file Excel có cấu trúc khác nhau đúng là "ám ảnh" của dân văn phòng! Mình cũng đã từng mất cả ngày trời chỉ để chuẩn hóa mấy cái báo cáo.

Bạn dùng Python để giải quyết vụ này hay thật. Mình tò mò không biết bạn xử lý thế nào với trường hợp tên cột không giống nhau hoàn toàn ấy nhỉ? Liệu có phải là mình phải định nghĩa sẵn một bộ quy tắc để ánh xạ tên cột không, hay có cách nào tự động hơn không bạn? Chia sẻ thêm chút kinh nghiệm nhé!

5

Cái vụ trích xuất dữ liệu từ file cấu trúc khác nhau đúng là nhức đầu thật! Mình cũng từng vật lộn với mấy cái báo cáo từ các phòng ban gửi lên, mỗi nơi một kiểu.

Bạn xử lý vụ tên cột khác nhau bằng cách nào vậy? Có dùng dictionary để map không, hay có cách nào thông minh hơn?

2

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký