使用 Python 对 Excel 工作表进行排序

拿到一份销售明细、库存清单或报名表时,第一件事往往就是排序:按日期从早到晚、按销售额从高到低,或者先按部门分块、再在部门内按业绩排列。数据量一多,手动在 Excel 里点排序容易选错范围,批量处理几十个文件时更不现实。用 Python 可以给任意工作表定义一列或多列排序规则,还能按单元格背景色、字体色甚至条件格式图标排序。本文以 Spire.XLS for Python 为例,演示这些常见的排序方式。

为什么用 Python 排序 Excel 数据

通过脚本排序有几个实际好处:

  • 批量处理:同一套排序规则可以套用到多个文件或多个工作表,规则写一次即可。
  • 排序维度多:除了按数值排序,还支持按背景色、字体色、图标等视觉属性排列。
  • 规则可累积:多级排序按顺序生效,能精确控制"先按什么、再按什么"。

环境准备

安装 Spire.XLS 库:

bash 复制代码
pip install Spire.XLS

在脚本中引入模块:

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

按单列或多列排序

排序通过 workbook.DataSorter 完成:先把排序列加入 SortColumns 集合,再对指定区域调用 Sort()。下面把第 3 列升序、第 4 列也升序,对一个 5 列的数据区域排序:

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

workbook = Workbook()
workbook.LoadFromFile("Data.xlsx")
worksheet = workbook.Worksheets[0]

# 添加排序列:第 3 列升序、第 4 列升序(列索引从 0 开始)
workbook.DataSorter.SortColumns.Add(2, OrderBy.Ascending)
workbook.DataSorter.SortColumns.Add(3, OrderBy.Ascending)

# 对指定区域执行排序
workbook.DataSorter.Sort(worksheet["A1:E19"])

workbook.SaveToFile("Sorted.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

SortColumns.Add() 的第一个参数是列索引(从 0 开始,2 即 C 列),第二个参数是 OrderBy 枚举,Ascending 升序、Descending 降序。Sort() 接收一个单元格区域,排序只在范围内进行;传入 worksheet["A1:E19"] 这样的字符串区域,或 worksheet.AllocatedRange 表示整个已用区域都可以。多列时前面的列是第一排序键,后面的列在其值相同时生效。

多级排序:按值、颜色与图标混合排列

实际数据经常带有格式标记------用底色标注优先级、用字体颜色区分状态、用条件格式图标显示趋势。SortComparsionType 枚举让排序不再局限于数值,下面是一个多级排序示例,四个层级依次为:数值、背景色、字体色、图标:

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

workbook = Workbook()
workbook.LoadFromFile("Data.xlsx")
worksheet = workbook.Worksheets[0]

# 清除已有规则,避免累积
workbook.DataSorter.SortColumns.Clear()

# 第一级:A 列按数值升序
workbook.DataSorter.SortColumns.Add(0, SortComparsionType.Values, OrderBy.Ascending)
# 第二级:C 列按背景色,深色排到底部
workbook.DataSorter.SortColumns.Add(2, SortComparsionType.BackgroundColor, OrderBy.Bottom)
# 第三级:D 列按字体色,深色排到底部
workbook.DataSorter.SortColumns.Add(3, SortComparsionType.FontColor, OrderBy.Bottom)
# 第四级:F 列按图标,高值图标排到顶部
workbook.DataSorter.SortColumns.Add(5, SortComparsionType.Icon, OrderBy.Top)

# 对整个已用区域执行排序
workbook.DataSorter.Sort(worksheet.AllocatedRange)

workbook.SaveToFile("MultiSorted.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

带 SortComparsionType 的重载用于按视觉属性排序:Values 按单元格值、BackgroundColor 按背景色、FontColor 按字体色、Icon 按条件格式图标。这类排序的 OrderBy 用 Top/Bottom 指定排列方向------Top 把该属性排到区域顶部,Bottom 排到底部。每级排序规则依次生效,前面的键相同时才比较后面的键。

批量对多个工作表应用排序

排序规则定义好后,套用到多个工作表只是多一层循环。注意每次换一组规则前要先清空 SortColumns,否则上一组的规则会残留累积:

python 复制代码
for i in range(0, workbook.Worksheets.Count):
    worksheet = workbook.Worksheets.get_Item(i)
    workbook.DataSorter.SortColumns.Clear()
    workbook.DataSorter.SortColumns.Add(0, SortComparsionType.Values, OrderBy.Ascending)
    workbook.DataSorter.Sort(worksheet.AllocatedRange)

Worksheets.Count 取工作表总数,逐个取 get_Item(i) 后清空规则、重新定义、执行排序,一份文件里所有工作表就能用各自的规则统一处理。

实用提示

  • 列索引从 0 开始 :SortColumns.Add() 的第一个参数是列在工作表中的索引,A 列是 0,不是 1。
  • 规则先清再加 :DataSorter 是工作簿级对象,重新定义排序规则前先调用 SortColumns.Clear(),避免多组规则叠加导致排序结果混乱。
  • OrderBy 的两套取值 :按值排序用 Ascending/Descending;按颜色或图标排序用 Top/Bottom,两者不要混用。
  • 范围选择 :只想排数据区就传字符串区域如 worksheet["A1:E19"];不确定数据边界时用 AllocatedRange 覆盖整个已用区域。
  • 资源释放 :处理完调用 workbook.Dispose(),批量处理时逐个文件处理、逐个释放。

总结

本文介绍了用 Python 在 Excel 中排序数据的常用方式:用 DataSorter.SortColumns 定义单列或多列排序规则并对指定区域执行 Sort(),借助 SortComparsionType 按背景色、字体色和条件格式图标做多级混合排序,以及在多工作表场景下批量应用排序规则。结合文件遍历,这些操作可以直接嵌入报表整理、数据清洗等自动化流程。

相关推荐
for_ever_love__1 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
用户8356290780511 小时前
使用 Python 合并 PowerPoint 演示文稿
后端·python
weixin_461769402 小时前
VS Code 中创建 Jupyter 文件(.ipynb)
ide·python·jupyter
2601_966949652 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈弄潮儿2 小时前
Python实战第1期:Python环境搭建与第一个程序
python
掘金者阿豪2 小时前
数据同步软件技术实践:从异构数据库迁移到实时数据流转,解析电科金仓KFS架构设计
后端
ServBay2 小时前
不会写代码,如何搭建自己的 AI 自动化工作流
后端·aigc·ai编程
心易行者2 小时前
Agent应用+API端点商业化进阶实战:从单体智能体到可付费调用的API全流程
运维·服务器·人工智能·python·apache
天远大数据2 小时前
从调用账单到业务回执:Agent单位成本核算实践
人工智能·后端