Python 操作 Excel:数据分组、分类汇总与取消分组全解

在日常数据处理工作中,Excel 数据分组是一项高频使用的功能。当面对包含大量明细数据的表格时,仅靠原始数据视图往往难以快速把握整体结构和汇总信息。Excel 的分组功能允许用户将相邻的行或列组织为可折叠/展开的层级结构,从而在宏观汇总与微观明细之间灵活切换。典型的应用场景包括:

  • 销售报表按地区分组
  • 财务报表按月度分组
  • 库存报表按品类分组等。

无论是业务人员直接在 Excel 中手动操作,还是开发者通过代码批量处理,掌握数据分组功能背后的实现逻辑都至关重要。本文将系统介绍使用 Python代 码实现 Excel 数据分组的方法,提供完整代码示例。

文章目录

    • [一、Excel 内置数据分组功能](#一、Excel 内置数据分组功能)
      • [1.1 行分组与列分组](#1.1 行分组与列分组)
      • [1.2 分类汇总](#1.2 分类汇总)
      • [1.3 不足之处](#1.3 不足之处)
    • [二、Python 实现 Excel 数据分组](#二、Python 实现 Excel 数据分组)
    • [三、使用 Free Spire.XLS 创建基础行分组](#三、使用 Free Spire.XLS 创建基础行分组)
    • 四、创建嵌套分组
    • 五、创建分类汇总
    • 六、取消分组
    • [📌 小结](#📌 小结)

一、Excel 内置数据分组功能

1.1 行分组与列分组

在 Excel 中,数据分组主要通过 "数据 " 选项卡下的 "组合 " 功能完成。用户可以选中连续的行或列,点击"分组"按钮后,Excel 会在行号左侧或列标上方自动生成 "---" 形状的控制按钮,单击该按钮即可折叠或展开分组区域。反向操作选择 "取消组合",即可解除分组状态。

1.2 分类汇总

分类汇总是 Excel 中一个更高级的数据分组功能。当用户需要对某一列的数据按特定字段进行分组汇总时,可以通过"数据"→"分类汇总"菜单进入设置界面。在该界面中,用户需要指定:

  • 分类字段(按哪个列进行分组)
  • 汇总方式(求和、平均值、计数、最大值、最小值等)
  • 选定汇总项(对哪些列进行汇总计算)

Excel 自动为每个分组插入汇总行,并生成可折叠的数据层次结构。

1.3 不足之处

⚠️ Excel 手动操作的局限在于缺乏自动化能力。当需要频繁生成分组报表,或需要将分组功能嵌入数据处理流程时,手动操作显然不能满足要求。这便是 Python 的价值所在。


二、Python 实现 Excel 数据分组

Free Spire.XLS for Python 是一个专门用于操作 Excel 文件的免费 Python 库,通过pip命令即可完成安装:

bash 复制代码
pip install Spire.XLS.Free

在数据分组功能方面,该库提供了以下核心能力:

✅ 对连续行或列进行基础分组

✅ 创建多级嵌套分组

✅ 一键生成分类汇总(Subtotal

✅ 取消已有分组

下文将逐一详细介绍这些功能的代码实现。


三、使用 Free Spire.XLS 创建基础行分组

最基础的分组操作是将指定连续区域的行或列分组。Worksheet 类提供了 GroupByRows()GroupByColumns() 方法来实现这一功能。

以下示例演示如何加载一个 Excel 文件,并对其中某个连续行区域进行分组:

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象
workbook = Workbook()
# 加载Excel文件
workbook.LoadFromFile("数据.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 对第2到第10行进行分组,False表示不折叠(即默认展开状态)
sheet.GroupByRows(2, 10, False)

# 保存结果文件
workbook.SaveToFile("行分组结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

GroupByRows() 方法的三个参数依次为:起始行索引、结束行索引、是否折叠分组。当第三个参数为True时,分组在打开时即处于折叠状态,所有明细行被隐藏,仅显示分组摘要行。

如需对列进行分组,可调用 GroupByColumns() 方法:

python 复制代码
# 对第4到第7列进行分组
sheet.GroupByColumns(4, 7, False)

上述代码运行后,在生成的 Excel 文件中,行号左侧或列标上方会出现分组控制按钮,用户可以手动展开或折叠分组区域。


四、创建嵌套分组

在实际业务场景中,数据往往具有多层次结构。这种嵌套分组可以通过多次调用GroupByRows()方法实现:先创建外层分组,再在外层分组内创建内层分组。

python 复制代码
from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("数据.xlsx")
sheet = workbook.Worksheets[0]

# 创建外层分组:第2到第10行(
sheet.GroupByRows(2, 10, False)

# 在外层分组内部创建嵌套分组(第3到第7行)
sheet.GroupByRows(3, 7, False)

workbook.SaveToFile("嵌套分组.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行上述代码后,Excel 文件中将出现内外层两级分组控制按钮。这种结构化的数据组织方式极大地提升了数据查看和报告的交互性。


五、创建分类汇总

分类汇总(Subtotal)是比单纯行分组更高级的功能,它不仅自动生成分组结构,还在每个分组后插入汇总行,并根据指定的汇总方式计算数值。Worksheet.Subtotal()方法正是为此设计的。

假设有如下图所示的销售数据表格(示例数据结构):

行号 地区 销售人员 销售额 订单数量
1 华东 张三 12500 15
2 华东 李四 9800 12
3 华南 王五 15700 18
4 华南 赵六 11200 14

按"地区 "字段进行分组并对"销售额"求和,是典型的分类汇总需求。实现代码如下:

python 复制代码
from spire.xls import *
from spire.xls.common import *

# 创建Workbook对象并加载Excel文件(假设该文件包含上述示例数据)
workbook = Workbook()
workbook.LoadFromFile("销售明细.xlsx")
sheet = workbook.Worksheets[0]

# 定义需要进行分类汇总的数据区域
# 区域为 A2 到 D5(仅数据行)
data_range = sheet.Range["A2:D5"]

# 调用完整参数的 Subtotal 方法
# 参数说明:
#   data_range        : 要处理的单元格区域,本例为 A1:D5
#   groupByIndex      : 分组列在区域内的索引(0-based),1 表示区域内的第2列(B列,即"地区"列)
#   totalFields       : 需要汇总的列索引列表(0-based),[3] 表示区域内的第4列(D列,即"销售额"列)
#   subtotalType      : 汇总类型,SubtotalTypes.Sum 表示求和
#   replace           : 是否替换现有的分类汇总,True 表示替换
#   addPageBreak      : 是否在每组后添加分页符,False 表示不添加
#   addsummaryBelowData : 是否将汇总行显示在数据下方,True 表示汇总行位于明细数据下方
sheet.Subtotal(data_range, 1, [3], SubtotalTypes.Sum, True, False, True)

workbook.SaveToFile("分类汇总结果.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

执行结果说明:

运行上述代码后,生成的 Excel 文件中的表格将被转换为以下结构:


六、取消分组

当需要移除现有分组时,可使用 UngroupByRows()UngroupByColumns() 方法:

python 复制代码
from spire.xls import *
from spire.xls.common import *

workbook = Workbook()
workbook.LoadFromFile("已分组文件.xlsx")
sheet = workbook.Worksheets[0]

# 取消第2到第10行的分组
sheet.UngroupByRows(2, 10)
# 取消第2到第4列的分组
sheet.UngroupByColumns(2, 4)

workbook.SaveToFile("取消分组后.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

UngroupByRows() 的参数只需指定起始行和结束行,方法会移除该范围内的所有分组,恢复到未分组状态。


📌 小结

本文系统介绍了在 Python 中实现 Excel 数据分组功能的方法。通过 GroupByRows()GroupByColumns()Subtotal() 等方法,开发者可以以纯代码的方式完成行分组、列分组、嵌套分组以及分类汇总等常见数据处理任务,生成可直接交付使用的带有分组结构的 Excel 报表。

此外该免费库还支持获取分组的大纲级别 、和控制分组的折叠与展开状态,如需相关功能可留言~

相关推荐
山上三树1 小时前
C/C++ 高频报错速查表(开发通用版)
c语言·开发语言·c++
Tian_Hang1 小时前
Factory Method | 工厂方法
开发语言·c++
wearegogog1231 小时前
基于MATLAB实现雷达RCS Swerling模型
开发语言·matlab
暴躁小师兄数据学院2 小时前
【AI大模型应用开发工程师特训笔记】第04讲(第9章):文件目录操作
人工智能·笔记·python
星梦清河2 小时前
Java—异步编程
java·开发语言
接着奏乐接着舞2 小时前
dto 转entity方法
java·开发语言
城数派2 小时前
2026年500米分辨率DEM地形数据(全球/全国/分省/分市)
数据库·arcgis·信息可视化·数据分析·excel
0x00072 小时前
译 Anders Hejlsberg 谈 C# 与 .NET
开发语言·c#·.net
TechWayfarer2 小时前
IP精准定位服务在快递网点规划中的应用:如何用客户位置数据辅助选址
大数据·网络·python·tcp/ip·交通物流