一、读出多 Sheet
import pandas as pd
# sheet_name=None → 返回 {sheet名: DataFrame}
sheets = pd.read_excel("报表.xlsx", sheet_name=None)
for name, df in sheets.items():
print(name, df.shape)
二、方式一:全部纵向合并成一张大表
适合所有 Sheet 结构相同(比如每月一张 Sheet,列一样)。
import glob, pandas as pd
frames = []
for f in glob.glob("data/*.xlsx"):
for sname, df in pd.read_excel(f, sheet_name=None).items():
df["来源文件"] = f.split("\\")[-1]
df["来源Sheet"] = sname
frames.append(df)
pd.concat(frames, ignore_index=True).to_excel("汇总.xlsx", index=False)
加两列标记来源,出问题能溯源。
三、方式二:每个 Sheet 单独成 Sheet 写进总表
适合结构不同、想原样保留各自内容。
with pd.ExcelWriter("总表.xlsx") as w:
for f in glob.glob("data/*.xlsx"):
base = f.split("\\")[-1][:20]
for sname, df in pd.read_excel(f, sheet_name=None).items():
df.to_excel(w, sheet_name=f"{base}_{sname}"[:31], index=False)
注意:Excel 的 sheet 名最长 31 个字符,超长会被截断,拼接时记得截断。
四、常见坑
- • Sheet 名重复:多个文件都有
Sheet1,写总表会覆盖,需在名字里拼上文件名。 - • 结构不同却强行 concat:列会错位,先确认要不要合并成一表。
- • 引擎:写多 sheet 用
openpyxl(默认),读 .xls 才用 xlrd。
五、配套工具怎么用
打开 main.py:
- 1. 选文件夹(含多个多 Sheet 的 Excel)。
- 2. 选模式:A 合并成单表 / B 每个 Sheet 独立成 Sheet。
几百个 Sheet,几分钟理顺。