我的知识记录

Python把一个Excel拆成多个文件

用pandas把一张大Excel表按指定行数平均拆分成多个小文件,也可按工作表拆分,自动命名、保留表头,适合数据量大、需分发或上传分片的场景。

场景痛点

一张几万行的销售明细表,要按每5000行拆成几个文件发给不同同事,或者按工作表分别导出。手工复制粘贴既慢又容易错位,分完还得逐个命名。Python几行代码就能按行批量切分,表头自动保留。

用到的库

pip install pandas openpyxl

完整代码

import os
import pandas as pd

def split_excel_by_row(input_file, output_dir, rows_per_file=5000, sheet_name=0):
"""
按行数把一个Excel拆成多个文件
input_file: 源Excel文件
output_dir: 输出目录
rows_per_file: 每个文件多少行数据(不含表头)
"""
os.makedirs(output_dir, exist_ok=True)
df = pd.read_excel(input_file, sheet_name=sheet_name)
total = len(df)
print(f"共{total}行数据,每份{rows_per_file}行")

# 循环切片
for i, start in enumerate(range(0, total, rows_per_file), start=1):
chunk = df.iloc[start:start + rows_per_file]
out_path = os.path.join(output_dir, f"拆分_{i:03d}.xlsx")
chunk.to_excel(out_path, index=False)
print(f"生成: {out_path},{len(chunk)}行")

def split_excel_by_sheet(input_file, output_dir):
"""把一个工作簿里的每个工作表拆成单独文件"""
os.makedirs(output_dir, exist_ok=True)
xls = pd.ExcelFile(input_file)
for sheet in xls.sheet_names:
df = pd.read_excel(input_file, sheet_name=sheet)
out_path = os.path.join(output_dir, f"{sheet}.xlsx")
df.to_excel(out_path, index=False)
print(f"工作表[{sheet}] -> {out_path}")

if __name__ == "__main__":
# 按行拆分
split_excel_by_row("./总表.xlsx", "./按行拆分", rows_per_file=5000)
# 按工作表拆分
split_excel_by_sheet("./多工作表.xlsx", "./按表拆分")

代码讲解

  • pd.read_excel 一次性读入大表,df.iloc[start:start+rows_per_file] 按行切片。
  • range(0, total, rows_per_file) 生成每次起始下标,enumerate(..., start=1) 让文件从001开始编号,方便排序。
  • split_excel_by_sheetpd.ExcelFile 拿到所有工作表名,逐个导出,文件名用工作表名。
  • os.makedirs(..., exist_ok=True) 自动建输出目录,已存在不报错。

运行结果

按行拆分时输出目录下生成 拆分_001.xlsx拆分_002.xlsx……每个文件都带原表头;按工作表拆分时每个工作表一个独立文件。

注意事项

  • 单次读入内存,几十万行以内没问题;超过百万行建议用 openpyxl 只读模式流式处理。
  • 拆分后各文件不含原始表头外的样式、公式;需要保留样式要用 openpyxl 复制单元格。
  • 文件名编号用 :03d 补齐三位,避免系统按字符串排序时 10 排在 2 前面。

Python把一个Excel拆成多个文件

标签:

更新时间:2026-09-15 09:01:58

上一篇:Python写入Excel数据并保存:从零生成xlsx文件

下一篇:Python按某一列的值拆分Excel工作表