python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel数据排序

Python对Excel数据排序的三种常见场景与实现方法

作者:秋天的落叶铺满小路

排序是 Excel 数据处理中最常见的操作之一,本文主要详细介绍了基于Spire.XLS for Python实现Excel自动化排序的三种核心场景,文中的示例代码讲解详细,有需要的可以参考下

排序是 Excel 数据处理中最常见的操作之一。数据量小、偶尔排序时,手动操作完全够用;但如果数据频繁更新、需要批量处理多个文件,或要按照业务自定义的规则排列,用代码自动完成会更稳定,也更容易复现。

本文基于 Spire.XLS for Python,按"先讲清排序前必须处理的一个共性问题,再分别演示三种排序场景"的顺序展开:单列排序、以某列为关键字对整表排序、按自定义序列排序。

一、环境准备与一个共性前提

安装与引入

通过 pip 安装 Spire.XLS for Python:

pip install Spire.XLS

安装完成后,在代码开头引入命名空间:

from spire.xls import *

排序前先把公式转成静态值

三种排序场景的代码里都有一段相同的预处理 :遍历待排序区域,把含公式的单元格替换为公式计算后的值。原因是排序以单元格的实际值为准,若保留公式,排序后公式引用可能错乱,结果与预期不符。这段逻辑在后续示例中不再重复解释,统一在此说明:

for cell in cellRange:
    if cell.HasFormula:
        value = cell.FormulaValue
        cell.Clear(ExcelClearOptions.ClearContent)
        cell.Value = value

另外,SortColumns.Add() 的列索引从 0 开始:A 列对应 0,B 列对应 1,依此类 推。配置时注意对照自己的表结构。

二、三种排序场景

场景一:单列排序

只对某一列的数据本身重排,其他列不参与。

from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("Input.xlsx")
worksheet = workbook.Worksheets[0]
cellRange = worksheet["G1:G13"]
# 公式转静态值(同第一节)
for cell in cellRange:
    if (cell.HasFormula):
        value = cell.FormulaValue
        cell.Clear(ExcelClearOptions.ClearContent)
        cell.Value = value
# 以第 6 列(G 列)为排序列,按数值降序
workbook.DataSorter.SortColumns.Add(6, SortComparsionType.Values, OrderBy.Descending)
workbook.DataSorter.Sort(cellRange)
workbook.SaveToFile("output/SortByColumn.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

要点 :操作范围是 G1:G13,即仅目标列。SortColumns.Add(6, ...) 中的 6 是 0 基索引,对应 G 列;排序按数值比较、降序执行。

场景二:以某列为关键字对整表排序

以某一列作为排序关键字,对整张数据表的各行重排,行与行之间的关联关系保持不变。

from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("Input.xlsx")
worksheet = workbook.Worksheets[0]
cellRange = worksheet["A1:G13"]
# 公式转静态值(同第一节)
for cell in cellRange:
    if (cell.HasFormula):
        value = cell.FormulaValue
        cell.Clear(ExcelClearOptions.ClearContent)
        cell.Value = value
# 仍以第 6 列(G 列)为关键字,按数值降序
workbook.DataSorter.SortColumns.Add(6, SortComparsionType.Values, OrderBy.Descending)
workbook.DataSorter.Sort(cellRange)
workbook.SaveToFile("output/SortByColumns.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

要点 :与场景一相比,排序关键字没变,变的只是操作范围——从 G1:G13 扩大到 A1:G13。执行 Sort() 后,程序按 G 列的数值整体移动每一行,A 到 F 列的内容随行一起变化,而不是只重排 G 列本身。

这种方式更贴近实际业务:例如按"销售额"列对销售表排序时,每行对应的产品、地区、日期等信息都要跟着移动,否则数据就会错位。

场景三:按自定义序列排序

升序、降序只能满足一部分需求。有时需要按业务定义的顺序排列,例如"高、中、低"优先级,或某套既定编号顺序。这时可以使用自定义排序列表。

from spire.xls import *
workbook = Workbook()
workbook.LoadFromFile("Input.xlsx")
worksheet = workbook.Worksheets[0]
cellRange = worksheet["A1:G13"]
# 显式定义排列顺序
customList = ["6", "5", "4", "3", "2", "1", "12", "11", "10", "9", "8", "7"]
# 以第 0 列(A 列)为排序列,使用自定义序列作为依据
workbook.DataSorter.SortColumns.Add(0, customList)
workbook.DataSorter.Sort(cellRange)
workbook.SaveToFile("output/CustomSortList.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

要点 :排序列中的值按 customList 中出现的先后顺序归位,而不是按数值大小比较。仍对 A1:G13 整个范围执行 Sort(),A 列各值的相对位置将按列表给定顺序排列。

需要注意两点:

三、三种场景对比

场景操作范围排序依据适用情况
单列排序仅目标列按数值升序 / 降序只需重排某一列自身
整表排序整张表(按某列)按某列数值升序 / 降序按关键字对整行数据排序
自定义序列排序整张表按自定义列表顺序业务有既定排列规则

三者最核心的区别在"操作范围":范围决定哪些数据参与重排,排序关键字决定按什么规则排。单列排序与整表排序的代码几乎相同,差别只在传给 Sort() 的区域;自定义序列排序则把排序依据从"数值比较"换成了"列表顺序"。

四、小结

使用 Spire.XLS for Python 排序时,把握三点即可覆盖多数场景:

  1. 先处理公式 :排序前把公式转为静态值,避免引用错乱。
  2. 选对操作范围 :只重排某列就传单列区域;要整行联动就传整表区域。
  3. 注意列索引从 0 开始 :配置 SortColumns.Add() 时对照表结构确认列号。

按这三步对照自己的数据,再套用上面三种场景的代码,基本就能完成常见的 Excel 排序任务。

到此这篇关于Python对Excel数据排序的三种常见场景与实现方法的文章就介绍到这了,更多相关Python Excel数据排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文