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 报表。

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

相关推荐
平常心的技术小牛2 小时前
Qt-快速上手-QMenuBar
开发语言·qt
青 春 记 忆2 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
Python私教3 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
余额瞒着我当琳4 小时前
C++--深拷贝三件套 + swap + 写时拷贝 + vector 扩容 + reserve
java·开发语言·c++
坐吃山猪5 小时前
WebClient内存配置解析
开发语言·springboot·webflux
北斗落凡尘5 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
jdksjw5 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Zach_菠萝侠5 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
Mike_Zhang5 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff6 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术