Python 拆分 Excel 文件:使用 Spire.XLS 实现按工作表、行、列和条件拆分

在日常办公和数据处理中,Excel 凭借其直观的表格结构和丰富的数据处理功能,被广泛应用于报表统计、数据管理以及信息整理等场景。但随着数据规模不断增加,一个 Excel 文件中可能包含多个工作表、大量数据记录,或者不同类型的数据内容。

但当我们需要进一步整理这些数据时,直接在 Excel 中操作往往会比较繁琐。例如,将不同工作表单独保存、按照固定行数拆分大型文件,或者根据某个字段生成多个独立文件。如果全都依靠手动复制粘贴完成,不仅效率较低,还容易出现数据遗漏。而通过 Python 自动化拆分 Excel 文件,可以有效减少重复操作,提高数据处理效率。

在今天的教程中,我们将借助 Spire.XLS for Python 介绍如何在 Python 环境中实现 Excel 拆分。文章将分别展示按照工作表、行、列以及指定条件拆分 Excel 的方法,帮助你根据实际需求选择合适的处理方式。

环境准备

在开始拆分 Excel 文件之前,需要先安装 Spire.XLS for Python。该组件提供了丰富的 Excel 文档处理接口,可以帮助开发者在不依赖 Microsoft Office 的情况下完成 Excel 创建、读取、修改以及格式转换等操作。

你可以通过 pip install spire.xls 快速安装 Spire.XLS for Python,此外该组件还提供免费版,适合用于小型项目和测试。

安装完成后,导入相关模块即可开始使用:

from spire.xls import *
from spire.xls.common import *

在本文中,我们主要会用到以下几个核心对象:

对象 作用
Workbook 表示整个 Excel 工作簿
Worksheet 表示工作簿中的工作表
Range 表示单元格区域

通过 Python 按工作表拆分 Excel 文件

一个 Excel 工作簿通常可能包含多个工作表,例如不同月份的数据、不同地区的报表等。如果希望将每个工作表单独保存为一个 Excel 文件,可以通过遍历 Workbook 中的 Worksheet 实现自动拆分。

使用 Spire.XLS 时,只需要加载原始文件,遍历所有工作表,然后创建新的 Workbook 并复制对应工作表即可。

主要实现步骤如下:

  1. 创建 Workbook 对象并加载 Excel 文件;
  2. 遍历工作簿中的所有 Worksheet;
  3. 创建新的 Workbook;
  4. 使用 AddCopy() 方法复制工作表;
  5. 保存生成的 Excel 文件。

完整代码如下:

from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象并加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("/input/示例.xlsx")

# 设置拆分后文件的保存路径
output_path = "/output/按表拆分/"

# 遍历工作簿中的所有工作表
for sheet in workbook.Worksheets:

    # 创建新的 Workbook 对象,并删除默认工作表
    new_workbook = Workbook()
    new_workbook.Worksheets.Clear()

    # 将当前工作表复制到新的工作簿中
    new_workbook.Worksheets.AddCopy(sheet)

    # 以当前工作表名称命名,并保存为独立的 Excel 文件
    new_workbook.SaveToFile(
        output_path + sheet.Name + ".xlsx",
        FileFormat.Version2016
    )

    # 释放资源
    new_workbook.Dispose()

workbook.Dispose()

运行代码后,原 Excel 中的每个工作表都会被单独保存为一个新的工作簿。

按工作表拆分 Excel 文件

通过 Python 按行拆分 Excel 文件

除了按照工作表拆分外,还可以根据数据行数量对 Excel 文件进行拆分。当一个工作表包含大量数据时,可以将其按照指定行数拆分成多个文件,方便后续管理和处理。

使用这种方式时,需要获取工作表总行数,并设置每个文件包含的数据行数量,然后通过 CopyRow() 方法将指定范围的数据复制到新的工作簿中。

实现步骤如下:

  1. 加载 Excel 文件;
  2. 获取工作表数据行数;
  3. 设置每个文件包含的行数;
  4. 创建新的 Workbook;
  5. 复制指定行数据并保存。

下面是可参考的完整代码示例:

from spire.xls import *
from spire.xls.common import *


# 创建 Workbook 对象并加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(
    "/input/示例.xlsx"
)

# 获取第一个工作表
worksheet = workbook.Worksheets[0]

# 设置文件保存路径
folderPath = "/output/按行拆分/"

# 将第 1-5 行拆分到新文件

# 创建新的 Workbook,并删除默认工作表
newWorkbook1 = Workbook()
newWorkbook1.Worksheets.Clear()

# 添加新的工作表
newWorksheet1 = newWorkbook1.Worksheets.Add("Sheet1")

# 复制第 1-5 行数据
for i in range(1, 6):
    worksheet.CopyRow(
        worksheet.Rows[i - 1],
        newWorksheet1,
        newWorksheet1.LastDataRow + 1,
        CopyRangeOptions.All
    )

# 复制列宽
for i in range(worksheet.Columns.Count):
    newWorksheet1.SetColumnWidth(
        i + 1,
        worksheet.GetColumnWidth(i + 1)
    )

# 保存文件
newWorkbook1.SaveToFile(
    folderPath + "1-5行.xlsx",
    FileFormat.Version2016
)

newWorkbook1.Dispose()


# 将第 6-11 行拆分到新文件

# 创建新的 Workbook,并清除默认工作表
newWorkbook2 = Workbook()
newWorkbook2.Worksheets.Clear()

# 添加新的工作表
newWorksheet2 = newWorkbook2.Worksheets.Add("Sheet1")

# 复制表头(第1行)
worksheet.CopyRow(
    worksheet.Rows[0],
    newWorksheet2,
    newWorksheet2.LastDataRow + 1,
    CopyRangeOptions.All
)

# 复制第6-11行数据
for i in range(6, 12):
    worksheet.CopyRow(
        worksheet.Rows[i - 1],
        newWorksheet2,
        newWorksheet2.LastDataRow + 1,
        CopyRangeOptions.All
    )

# 复制列宽
for i in range(worksheet.Columns.Count):
    newWorksheet2.SetColumnWidth(
        i + 1,
        worksheet.GetColumnWidth(i + 1)
    )

# 保存文件
newWorkbook2.SaveToFile(
    folderPath + "6-11行.xlsx",
    FileFormat.Version2016
)

newWorkbook2.Dispose()
workbook.Dispose()

按行拆分 Excel 工作表

通过 Python 按列拆分 Excel 文件

在处理 Excel 数据时,有时我们并不需要拆分整个工作表,而是希望将其中部分列单独提取出来。例如,一个表格中同时包含员工基础信息、销售记录和财务数据,但这些内容需要分别提供给不同人员查看。

这种情况下,可以按照列的位置拆分 Excel,将指定范围内的列复制到新的工作簿中。Spire.XLS 提供了 CopyColumn() 方法,可以方便地复制目标列,同时保留原有单元格格式。

实现步骤如下:

  1. 创建新的 Workbook;
  2. 添加新的 Worksheet;
  3. 使用 CopyColumn() 复制目标列;
  4. 设置行高并保存文件。

完整代码示例如下:

from spire.xls import *
from spire.xls.common import *

# 创建 Workbook 对象并加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(
    "/input/示例.xlsx"
)

# 获取第一个工作表
worksheet = workbook.Worksheets[0]
# 设置输出路径
folderPath = "/output/按列拆分/"


# 拆分第 1-2 列(A-B列)

# 创建新的 Workbook,并删除默认工作表
newWorkbook1 = Workbook()
newWorkbook1.Worksheets.Clear()

# 添加新的工作表
newWorksheet1 = newWorkbook1.Worksheets.Add("Sheet1")

# 复制第1-2列
for i in range(1, 3):
    worksheet.CopyColumn(
        worksheet.Columns[i - 1],
        newWorksheet1,
        newWorksheet1.LastDataColumn + 1,
        CopyRangeOptions.All
    )

# 复制行高
for i in range(worksheet.Rows.Count):
    newWorksheet1.SetRowHeight(
        i + 1,
        worksheet.GetRowHeight(i + 1)
    )

# 保存文件
newWorkbook1.SaveToFile(
    folderPath + "AB.xlsx",
    FileFormat.Version2016
)

newWorkbook1.Dispose()


# 拆分第 3-5 列(C-E列)

# 创建一个 Workbook,并删除默认工作表
newWorkbook2 = Workbook()
newWorkbook2.Worksheets.Clear()

# 添加新的工作表
newWorksheet2 = newWorkbook2.Worksheets.Add("Sheet1")

# 复制第3-5列
for i in range(3, 6):
    worksheet.CopyColumn(
        worksheet.Columns[i - 1],
        newWorksheet2,
        newWorksheet2.LastDataColumn + 1,
        CopyRangeOptions.All
    )

# 复制行高
for i in range(worksheet.Rows.Count):
    newWorksheet2.SetRowHeight(
        i + 1,
        worksheet.GetRowHeight(i + 1)
    )

# 保存文件
newWorkbook2.SaveToFile(
    folderPath + "CDE.xlsx",
    FileFormat.Version2016
)

newWorkbook2.Dispose()

# 拆分第 6 列(F列)

# 创建一个 Workbook,并删除默认工作表
newWorkbook3 = Workbook()
newWorkbook3.Worksheets.Clear()
# 添加新的工作表
newWorksheet3 = newWorkbook3.Worksheets.Add("Sheet1")

# 复制第6列
worksheet.CopyColumn(
    worksheet.Columns[5],
    newWorksheet3,
    newWorksheet3.LastDataColumn + 1,
    CopyRangeOptions.All
)

# 复制行高
for i in range(worksheet.Rows.Count):
    newWorksheet3.SetRowHeight(
        i + 1,
        worksheet.GetRowHeight(i + 1)
    )

# 保存文件
newWorkbook3.SaveToFile(
    folderPath + "F.xlsx",
    FileFormat.Version2016
)

newWorkbook3.Dispose()
workbook.Dispose()

按列拆分 Excel 工作表

实践:通过 Python 按指定条件拆分 Excel

相比上面我们介绍的固定规则,在实践中更常见的是根据 Excel 某一列中的数据内容进行分类拆分。例如,员工信息表中的“部门”列包含销售部、技术部、人事部等不同值,希望自动将属于同一部门的数据整理到一个独立文件中;销售数据也可以按照地区、月份等条件生成不同报表。

按条件拆分 Excel 工作表的方式更加贴合实际需求。它可以根据 Excel 中的数据内容自动分类,无需手动筛选和复制,能够快速生成符合不同业务规则的独立 Excel 文件。

下面我们以“按照员工部门拆分 Excel”为例。假设员工信息表中包含姓名、部门、职位等字段,希望自动生成:

销售部.xlsx
技术部.xlsx
人事部.xlsx

每个文件只保存对应部门的员工数据。

实现流程如下:

  1. 加载 Excel 文件;
  2. 指定拆分依据的列;
  3. 遍历数据行并获取分类值;
  4. 根据分类值创建新的 Workbook;
  5. 复制对应数据行;
  6. 保存生成的 Excel 文件。
from spire.xls import *
from spire.xls.common import *

# 加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile("/员工信息.xlsx")

# 获取第一个工作表
worksheet = workbook.Worksheets[0]

# 输出目录
folderPath = "/output/按条件拆分/"

# 用于保存不同部门对应的 Workbook
department_books = {}

# 获取总行数
row_count = worksheet.Rows.Count

# 设置按部门拆分
department_column = 3

# 遍历数据行(跳过表头)
for i in range(1, row_count):
    # 获取部门名称
    department = worksheet.Range[i + 1, department_column].Value

    if department not in department_books:
        # 创建新的 Workbook
        newWorkbook = Workbook()
        newWorkbook.Worksheets.Clear()

        newWorksheet = newWorkbook.Worksheets.Add("Sheet1")

        # 复制表头
        worksheet.CopyRow(
            worksheet.Rows[0],
            newWorksheet,
            newWorksheet.LastDataRow + 1,
            CopyRangeOptions.All
        )

        department_books[department] = newWorkbook

    # 获取目标 Sheet
    newWorksheet = department_books[department].Worksheets[0]

    # 复制当前行
    worksheet.CopyRow(
        worksheet.Rows[i],
        newWorksheet,
        newWorksheet.LastDataRow + 1,
        CopyRangeOptions.All
    )

# 保存文件
for department, wb in department_books.items():

    wb.SaveToFile(
        folderPath + department + ".xlsx",
        FileFormat.Version2016
    )
    wb.Dispose()

workbook.Dispose()

按条件拆分 Excel 文件

总结

Excel 拆分是数据整理过程中非常常见的需求。通过 Python 结合 Spire.XLS,可以将原本需要手动完成的复制、筛选和保存操作自动化,大幅提高处理效率。

本文介绍了四种常见的 Excel 拆分方式:

  • 按工作表拆分:适用于多个 Sheet 独立保存;
  • 按行拆分:适用于大型数据文件分割;
  • 按列拆分:适用于字段分类和权限管理;
  • 按条件拆分:适用于部门、地区、日期等实际业务场景。

根据不同的数据结构和使用需求,选择合适的拆分方式,可以更加高效地完成 Excel 文件处理任务。

posted @ 2026-07-24 16:11  E-iceblue  阅读(6)  评论(0)    收藏  举报