Nhờ anh/chị hổ trợ giúp em cần làm 1 File excel tổng hợp Trong tháng 7 có 30 File - Gộp thành 1 File với 30 Sheet chỉ sử dụng Sheet có dữ liệu Pivot sẵn . Tính tổng COD và trung bình Trọng lượng tính phí . Em có làm mẫu tham khảo như vậy nhưng làm từng File thì sẻ mất thời gian . Nên nhờ anh/chị cao nhân hướng dẫn em có phương pháp nào nhanh . em có tìm hiểu công cụ Combine Data trong Excel nhưng ko rỏ phương pháp . Phiền anh chị hướng dẫn em kèm 1 File mẫu để em tham khảo . Em xin cảm ơn rất nhiều --- Dead line dí quá T__T
Em bổ sung luôn giải pháp bằng Pythol . COD đã chỉnh sửa để xuất đúng yêu cầu theo mẫu em mong muốn .
Giữ nguyên sheet Pivot (không lấy dữ liệu gốc, chỉ lấy dữ liệu tổng hợp sẵn).
Gộp thành 1 file Excel mới với:
Mỗi ngày = 1 sheet (tên sheet theo tên file: 01.07, 02.07, … 30.07).
Mỗi sheet chứa đúng bảng Pivot đã có trong file gốc.
Thêm 1 sheet Tổng hợp cuối cùng:
Cột: Ngày – Tổng COD – Trung bình Trọng lượng tính phí.
Tất cả dữ liệu trong mọi sheet đều được căn giữa (center).
Vẫn giữ auto-fit chiều rộng cột.
Các sheet ngày giữ đầy đủ dữ liệu, chỉ xoá dòng “Unnamed”.
Sheet Tổng hợp giữ nguyên 3 cột, hiển thị số có dấu phẩy + trọng lượng 2 chữ số thập phân.
Em gửi kèm File Pythol và File excel mẫu sau khi xuất để a/e tham khảo
A/e tải về mở bằng NOTE chỉnh đường dẫn trong đoạn code :
folder = Path(r"Đường dẫn Folder lưu trữ dữ liệu cần gộp")
files = sorted(folder.glob("*.xlsx"))
Rồi chạy là auto - ae có thể tham khảo Chat GPT nếu muốn điều chỉnh thêm phù hợp . Mong sẻ có ích với a/e nào cần . Xin chân thành cảm ơn
Bài đã được tự động gộp:
import pandas as pd
from pathlib import Path
from datetime import datetime
from openpyxl.utils import get_column_letter
from openpyxl import load_workbook
from openpyxl.styles import Alignment
# Thư mục chứa file Excel theo ngày
folder = Path(r" đường dẫn Folder chứa dữ liệu cần gộp ")
files = sorted(folder.glob("*.xlsx"))
def find_header_row(df, search_rows=15):
for i in range(min(search_rows, len(df))):
row = df.iloc.astype(str).fillna("")
text = " ".join(row.tolist()).lower()
if ("row labels" in text) or ("sum of" in text) or ("cod" in text) or ("trọng" in text):
return i
return df.head(search_rows).notna().sum(axis=1).idxmax()
def get_day_name(p: Path):
parts = p.stem.split(".")
return parts[0] + "." + parts[1] if len(parts) >= 2 else p.stem
summary_rows = []
with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
for file in files:
day_name = get_day_name(file)
try:
raw = pd.read_excel(file, sheet_name=0, header=None)
# Xoá các dòng chứa "Unnamed"
mask_unnamed = raw.astype(str).apply(
lambda s: s.str.contains("Unnamed", case=False, na=False)
).any(axis=1)
raw = raw[~mask_unnamed].reset_index(drop=True)
if raw.empty:
pd.DataFrame().to_excel(writer, sheet_name=day_name, index=False)
summary_rows.append([day_name, 0, 0.0])
continue
# Tìm Grand Total trong df gốc (trước khi format chuỗi)
df_raw = raw.iloc[hrow + 1:].copy()
df_raw.columns = header
df_raw = df_raw.reset_index(drop=True)
if not gt_mask.any():
summary_rows.append([day_name, 0, 0.0])
else:
gt = df_raw[gt_mask].iloc[0]
# Xác định cột COD và Trọng lượng
def find_col(cols, keywords):
for c in cols:
sc = str(c).lower()
if any(k in sc for k in keywords):
return c
return None
# Format COD có dấu phẩy trong tất cả các sheet
cod_col = next((c for c in df.columns if "COD" in str(c).upper()), None)
if cod_col:
df[cod_col] = pd.to_numeric(df[cod_col], errors="coerce")
df[cod_col] = df[cod_col].fillna(0).astype(int).map("{:,}".format)
# Ghi sheet đã làm sạch
df.to_excel(writer, sheet_name=day_name, index=False)
# Tạo sheet "Tổng hợp" (giữ cả 3 cột)
summary_df = pd.DataFrame(summary_rows, columns=["Ngày", "Tổng COD", "Trọng lượng tính phí"])
summary_df["Tổng COD"] = summary_df["Tổng COD"].map(lambda x: f"{x:,.0f}")
summary_df["Trọng lượng tính phí"] = summary_df["Trọng lượng tính phí"].map(lambda x: f"{x:,.2f}")
# Auto-fit độ rộng cột + canh giữa dữ liệu
wb = load_workbook(output_file)
for ws in wb.worksheets:
for col_cells in ws.columns:
width = 0
for cell in col_cells:
if cell.value is not None:
width = max(width, len(str(cell.value)))
# Căn giữa
cell.alignment = Alignment(horizontal="center", vertical="center")
ws.column_dimensions[get_column_letter(col_cells[0].column)].width = width + 2
wb.save(output_file)
Em bổ sung luôn giải pháp bằng Pythol . COD đã chỉnh sửa để xuất đúng yêu cầu theo mẫu em mong muốn .
Giữ nguyên sheet Pivot (không lấy dữ liệu gốc, chỉ lấy dữ liệu tổng hợp sẵn).
Tôi nghĩ rằng bạn đã biết dùng pivot table thì tổng hợp bằng pivot table luôn chứ? Mà hễ tổng hợp bằng pivot thì 1 bảng duy nhất hàng dọc chắc chắn dễ hơn nhiều bảng ở nhiều sheet.
Ghi chú:
- Bài 1 bạn không gởi file hoặc hình ảnh cái tổng hợp, biết hình dạng thế nào mà lấy tối ưu? Làm sao mà biết "mẫu em mong muốn" là cái gì?
- Trong 3 file bạn gởi có 1 file không phải pivot table và PQ phải tốn thêm 1 dòng lệnh lọc.
- Canh giữa là 1 điều tối kỵ (riêng tôi coi là nhảm nhí)
- Dữ liệu có dòng “Unnamed” cần phải bỏ thì chỉ mình bạn biết. Dù vậy dùng PQ thì muốn bỏ cái gì chẳng được.
- Dùng PQ thì có thể làm ngay khi chỉ có 1 số ít ngày có dữ liệu (có file). Khi có thêm dữ liệu chỉ cần thêm file vào và refresh.
Dùng cho các bạn cùng "ý" sử dụng Power query. Giờ mới có bảng tổng hợp mẫu nên PQ phải thêm 1 cột ngày. Thêm dữ liệu thì cứ thẩy thêm file vào thư mục.
Cách tạo PQ trong file dành cho người mới tìm hiểu.
Ý kiến riêng em khi chạy CODE gộp bằng Pythol bảng báo đẹp hơn trong 1 file excel tổng hợp có chi tiết, 30 sheet cho 30 ngày và 1 sheet tổng hợp . Gộp PQ chỉ chung 1 bản rất rối mắt em chạy Pythol chỉ cần 1 click ứng dụng cho tất cả các a/e " có sẵn File excel báo cáo riêng từng ngày chỉ cần gộp lại làm báo cáo tổng" . Kèm thêm biểu đồ - nhanh - gọn- rỏ ràng . PQ mì ăn liền quá nên em thấy chạy CODE tuy hơi phức tạp nhưng hiệu quả . A/e nào hiểu xíu thì dể thao tác . còn có thể thêm biểu đồ xuất dữ liệu từ bất cứ Sheet nào mình muốn . Em xin cảm ơn . A/e nào cần gửi tin nhắn em hổ trợ Free luôn ^^
Em bổ sung luôn giải pháp bằng Pythol . COD đã chỉnh sửa để xuất đúng yêu cầu theo mẫu em mong muốn .
Giữ nguyên sheet Pivot (không lấy dữ liệu gốc, chỉ lấy dữ liệu tổng hợp sẵn).
Gộp thành 1 file Excel mới với:
Mỗi ngày = 1 sheet (tên sheet theo tên file: 01.07, 02.07, … 30.07).
Mỗi sheet chứa đúng bảng Pivot đã có trong file gốc.
Thêm 1 sheet Tổng hợp cuối cùng:
Cột: Ngày – Tổng COD – Trung bình Trọng lượng tính phí.
Tất cả dữ liệu trong mọi sheet đều được căn giữa (center).
Vẫn giữ auto-fit chiều rộng cột.
Các sheet ngày giữ đầy đủ dữ liệu, chỉ xoá dòng “Unnamed”.
Sheet Tổng hợp giữ nguyên 3 cột, hiển thị số có dấu phẩy + trọng lượng 2 chữ số thập phân.
Em gửi kèm File Pythol và File excel mẫu sau khi xuất để a/e tham khảo
A/e tải về mở bằng NOTE chỉnh đường dẫn trong đoạn code :
folder = Path(r"Đường dẫn Folder lưu trữ dữ liệu cần gộp")
files = sorted(folder.glob("*.xlsx"))
Rồi chạy là auto - ae có thể tham khảo Chat GPT nếu muốn điều chỉnh thêm phù hợp . Mong sẻ có ích với a/e nào cần . Xin chân thành cảm ơn
Bài đã được tự động gộp:
import pandas as pd
from pathlib import Path
from datetime import datetime
from openpyxl.utils import get_column_letter
from openpyxl import load_workbook
from openpyxl.styles import Alignment
# Thư mục chứa file Excel theo ngày
folder = Path(r" đường dẫn Folder chứa dữ liệu cần gộp ")
files = sorted(folder.glob("*.xlsx"))
def find_header_row(df, search_rows=15):
for i in range(min(search_rows, len(df))):
row = df.iloc.astype(str).fillna("")
text = " ".join(row.tolist()).lower()
if ("row labels" in text) or ("sum of" in text) or ("cod" in text) or ("trọng" in text):
return i
return df.head(search_rows).notna().sum(axis=1).idxmax()
def get_day_name(p: Path):
parts = p.stem.split(".")
return parts[0] + "." + parts[1] if len(parts) >= 2 else p.stem
summary_rows = []
with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
for file in files:
day_name = get_day_name(file)
try:
raw = pd.read_excel(file, sheet_name=0, header=None)
# Xoá các dòng chứa "Unnamed"
mask_unnamed = raw.astype(str).apply(
lambda s: s.str.contains("Unnamed", case=False, na=False)
).any(axis=1)
raw = raw[~mask_unnamed].reset_index(drop=True)
if raw.empty:
pd.DataFrame().to_excel(writer, sheet_name=day_name, index=False)
summary_rows.append([day_name, 0, 0.0])
continue
# Tìm Grand Total trong df gốc (trước khi format chuỗi)
df_raw = raw.iloc[hrow + 1:].copy()
df_raw.columns = header
df_raw = df_raw.reset_index(drop=True)
if not gt_mask.any():
summary_rows.append([day_name, 0, 0.0])
else:
gt = df_raw[gt_mask].iloc[0]
# Xác định cột COD và Trọng lượng
def find_col(cols, keywords):
for c in cols:
sc = str(c).lower()
if any(k in sc for k in keywords):
return c
return None
# Format COD có dấu phẩy trong tất cả các sheet
cod_col = next((c for c in df.columns if "COD" in str(c).upper()), None)
if cod_col:
df[cod_col] = pd.to_numeric(df[cod_col], errors="coerce")
df[cod_col] = df[cod_col].fillna(0).astype(int).map("{:,}".format)
# Ghi sheet đã làm sạch
df.to_excel(writer, sheet_name=day_name, index=False)
# Tạo sheet "Tổng hợp" (giữ cả 3 cột)
summary_df = pd.DataFrame(summary_rows, columns=["Ngày", "Tổng COD", "Trọng lượng tính phí"])
summary_df["Tổng COD"] = summary_df["Tổng COD"].map(lambda x: f"{x:,.0f}")
summary_df["Trọng lượng tính phí"] = summary_df["Trọng lượng tính phí"].map(lambda x: f"{x:,.2f}")
# Auto-fit độ rộng cột + canh giữa dữ liệu
wb = load_workbook(output_file)
for ws in wb.worksheets:
for col_cells in ws.columns:
width = 0
for cell in col_cells:
if cell.value is not None:
width = max(width, len(str(cell.value)))
# Căn giữa
cell.alignment = Alignment(horizontal="center", vertical="center")
ws.column_dimensions[get_column_letter(col_cells[0].column)].width = width + 2
wb.save(output_file)
Pivot hay PQ có chạy nhanh bằng CODE ko các bác cứ gửi Folder miễn phù hợp với quy chuẩn . Lấy ví dụ ở đây là trường hợp " khớp với Logic dữ liệu " của em . Em chi cần 1 click 10 giây . em hổ trợ cho tất cả các ae nào cần luôn ạ . Em làm PQ như bác gửi rồi cảm ơn vì bác có nhã ý nhưng mì ăn liền lắm mang cái báo cáo đó đi trình thì gãy ạ !!!!! Em xem qua cái PQ bác giúp em với mẫu là 3 ngày dồn hết 1 Sheet T_T . Em trình báo cáo chạy bằng CODE hợp chuẩn với sếp của em . đúng với ý trên ( người trả lương cho em ) . thì khiếu thẩm mĩ có tốt hay ko thì e vẩn ĐẠT ạ . thân cảm ơn a/e quan tâm .
Pivot hay PQ có chạy nhanh bằng CODE ko các bác cứ gửi Folder miễn phù hợp với quy chuẩn . Lấy ví dụ ở đây là trường hợp " khớp với Logic dữ liệu " của em . Em chi cần 1 click 10 giây . em hổ trợ cho tất cả các ae nào cần luôn ạ . Em làm PQ như bác gửi rồi cảm ơn vì bác có nhã ý nhưng mì ăn liền lắm mang cái báo cáo đó đi trình thì gãy ạ !!!!! Em xem qua cái PQ bác giúp em với mẫu là 3 ngày dồn hết 1 Sheet T_T . Em trình báo cáo chạy bằng CODE hợp chuẩn với sếp của em . đúng với ý trên ( người trả lương cho em ) . thì khiếu thẩm mĩ có tốt hay ko thì e vẩn ĐẠT ạ . thân cảm ơn a/e quan tâm .
Em chạy thử với vài mẫu báo cáo rồi chỉ cần hợp Logic Gộp cái File thành 1 File nhiều Sheet . Bác chỉ cần điều chỉnh CODE chủ yếu là xuất tên Sheet cho phù hợp với bác . Nếu khó quá cứ Chat GPT copy đoạn CODE vào rồi nhờ bạn ấy điều chỉnh bác ạ Speed and Free . Em biết gì share nấy ko múa máy gì ở đây cả , Em làm rồi báo cáo rồi qua xe luôn rồi ạ !!!!!
Em chạy thử với vài mẫu báo cáo rồi chỉ cần hợp Logic Gộp cái File thành 1 File nhiều Sheet . Bác chỉ cần điều chỉnh CODE chủ yếu là xuất tên Sheet cho phù hợp với bác . Nếu khó quá cứ Chat GPT copy đoạn CODE vào rồi nhờ bạn ấy điều chỉnh bác ạ Speed and Free . Em biết gì share nấy ko múa máy gì ở đây cả , Em làm rồi báo cáo rồi qua xe luôn rồi ạ !!!!!
Pivot hay PQ có chạy nhanh bằng CODE ko các bác cứ gửi Folder miễn phù hợp với quy chuẩn . Lấy ví dụ ở đây là trường hợp " khớp với Logic dữ liệu " của em . Em chi cần 1 click 10 giây . em hổ trợ cho tất cả các ae nào cần luôn ạ . Em làm PQ như bác gửi rồi cảm ơn vì bác có nhã ý nhưng mì ăn liền lắm mang cái báo cáo đó đi trình thì gãy ạ !!!!! Em xem qua cái PQ bác giúp em với mẫu là 3 ngày dồn hết 1 Sheet T_T . Em trình báo cáo chạy bằng CODE hợp chuẩn với sếp của em . đúng với ý trên ( người trả lương cho em ) . thì khiếu thẩm mĩ có tốt hay ko thì e vẩn ĐẠT ạ . thân cảm ơn a/e quan tâm .
Bài đã được tự động gộp:
Pivot hay PQ có chạy nhanh bằng CODE ko các bác cứ gửi Folder miễn phù hợp với quy chuẩn . Lấy ví dụ ở đây là trường hợp " khớp với Logic dữ liệu " của em . Em chi cần 1 click 10 giây . em hổ trợ cho tất cả các ae nào cần luôn ạ . Em làm PQ như bác gửi rồi cảm ơn vì bác có nhã ý nhưng mì ăn liền lắm mang cái báo cáo đó đi trình thì gãy ạ !!!!! Em xem qua cái PQ bác giúp em với mẫu là 3 ngày dồn hết 1 Sheet T_T . Em trình báo cáo chạy bằng CODE hợp chuẩn với sếp của em . đúng với ý trên ( người trả lương cho em ) . thì khiếu thẩm mĩ có tốt hay ko thì e vẩn ĐẠT ạ . thân cảm ơn a/e quan tâm .
Bài đã được tự động gộp:
Em chạy thử với vài mẫu báo cáo rồi chỉ cần hợp Logic Gộp cái File thành 1 File nhiều Sheet . Bác chỉ cần điều chỉnh CODE chủ yếu là xuất tên Sheet cho phù hợp với bác . Nếu khó quá cứ Chat GPT copy đoạn CODE vào rồi nhờ bạn ấy điều chỉnh bác ạ Speed and Free . Em biết gì share nấy ko múa máy gì ở đây cả , Em làm rồi báo cáo rồi qua xe luôn rồi ạ !!!!!
Em chạy rồi bác thử rồi bác có cái nào ko chạy đc gửi đây em thử cho . Em muốn giúp mà có lấy phí gì ở đây đâu . em kẹt lên dây tìm giải pháp có người giúp em thì e củng muốn giúp lại . Bác có vấn đề nào gặp giống em ko em hổ trợ cho . Ko mất phí thật đấy
Em chạy rồi bác thử rồi bác có cái nào ko chạy đc gửi đây em thử cho . Em muốn giúp mà có lấy phí gì ở đây đâu . em kẹt lên dây tìm giải pháp có người giúp em thì e củng muốn giúp lại . Bác có vấn đề nào gặp giống em ko em hổ trợ cho . Ko mất phí thật đấy
em có nhận em viết đâu em ghi rỏ kìa . thì em làm được chạy đc ai cần em hổ trợ . em có tự viết đâu mà lấy tiền hài hước đúng ko a trai ,. nên em tình nguyện mà ai cần thấy khó em tư vấn cần em giúp Free ai lại lấy tiền . GPT em củng bỏ tiền ra mua bắt nó làm việc mà a trai có tiền thì làm phiền thôi nè . hợp lệ !!!!
10 giây đối với tôi là chấp nhận được nhưng nhiều người chê. Họ thích dưới 1 giây; PQ refresh 31 file chắc cũng mức đó hoặc ít hơn tùy vào dữ liệu vì tôi không có đủ 31 file. Tôi cũng không tranh cãi về việc cái nào nhanh hơn, nhưng tôi chọn PQ vì nó đơn giản, ai cũng làm được. Tôi cũng có thể viết VBA và nhấn nút nhưng tôi vẫn hạ xuống mức ưu tiên sau cùng. Có điều VBA tôi viết chắc chắn nhanh hơn.
Bạn cứ nhắc lại cái biểu đồ. Hễ tổng hợp được ra dữ liệu bằng bất cứ cách nào thì biểu đồ nào chẳng vẽ được? Mà thôi, bạn cứ dùng AI và cứ chia sẻ cách của bạn.
Té ra là khiếu thẩm mỹ của sếp. Tuy vậy tôi khen khiếu thẩm mỹ nhưng tôi không hề khen về cấu trúc cơ sở dữ liệu.
10 giây đối với tôi là chấp nhận được nhưng nhiều người chê. Họ thích dưới 1 giây; PQ refresh 31 file chắc cũng mức đó hoặc ít hơn tùy vào dữ liệu vì tôi không có đủ 31 file. Tôi cũng không tranh cãi về việc cái nào nhanh hơn, nhưng tôi chọn PQ vì nó đơn giản, ai cũng làm được. Tôi cũng có thể viết VBA và nhấn nút nhưng tôi vẫn hạ xuống mức ưu tiên sau cùng. Có điều VBA tôi viết chắc chắn nhanh hơn.
Bạn cứ nhắc lại cái biểu đồ. Hễ tổng hợp được ra dữ liệu bằng bất cứ cách nào thì biểu đồ nào chẳng vẽ được? Mà thôi, bạn cứ dùng AI và cứ chia sẻ cách của bạn.
A giúp thì em cảm ơn . Buôn lời cay đắng làm chi cho đau lòng nhau a trai ! sếp em hay dở củng là sếp , củng ngon hơi khối ông ối dồi ôi ! A có cách nào hay làm luôn cho a/e học hỏi . File em gửi kèm Link luôn a có mẫu ko gửi cho em nghiên cứu ! E rất thích học cái mới ai hay là em học ko ngại , em biết là em share luôn ! Cho em học với a
Bài đã được tự động gộp:
Hót hay ko qua tay làm . A có mẫu nào giống vậy thông tin cở bản thôi gửi em xem học hỏi với . A cho em giải pháp em thấy chưa đủ chưa phù hợp em tự tìm share lên cho ae nghiên cứu . em vừa hót vừa làm luôn a trai em ko hót suôn cái nào ko biết em bỏ tiền học hỏi . rồi chỉ free cho ae giao lưu . A/e mình vậy cho đẹp chơi vậy còn đẹp hơn bản báo cáo của e rồi có đúng ko ạ
A giúp thì em cảm ơn . Buôn lời cay đắng làm chi cho đau lòng nhau a trai ! sếp em hay dở củng là sếp , củng ngon hơi khối ông ối dồi ôi ! A có cách nào hay làm luôn cho a/e học hỏi . File em gửi kèm Link luôn a có mẫu ko gửi cho em nghiên cứu ! E rất thích học cái mới ai hay là em học ko ngại , em biết là em share luôn ! Cho em học với aHo
Tôi ngưng tại đây. Bạn chỉ đưa lên có 3 file dữ liệu và 1 sheet tổng hợp (mãi đến bài #4 mới đưa lên sau khi tôi làm xong cho bài 1), sau đó tôi cũng làm xong theo mẫu tổng hợp rồi. Bạn muốn gì hơn thì phải có mẫu kết quả đầy đủ, dữ liệu đầy đủ. Kể cả biểu đồ cũng chỉ thấy hình.
A cho em giải pháp em thấy chưa đủ chưa phù hợp
...
Cho em học với a
Cái tôi đã làm đã giống sheet tổng hợp mẫu rồi, còn chưa phù hợp chỗ nào? Muốn học thì xem file, trong đó toàn bộ đã bày ra đâu có giấu giếm gì?
Ghi chú:
Lấy dữ liệu từ sheet1 (vừa pivot table vừa không phải) lại bị kèm theo 1 dòng blank và 1 dòng grand total của pivot; mất công lọc bỏ.
Mỗi file trước khi đưa vào tổng hợp lại phải tạo pivot table. PQ hoặc bất kỳ phương pháp nào đều có thể lấy từ dữ liệu thô. Tôi làm theo yêu cầu bài 1 thôi chứ nếu tôi làm từ đầu thì không như vậy.