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
pandasvàopenpyxl(hoặcxlrdtùy phiên bản Excel). Cài đặt bằng lệnh:pip install pandas openpyxl - Phần
column_mappingcầ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é!