You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的openpyxl库对生成的Excel表格按指定字段排序

实现Excel表格按Name字段排序的两种方案

openpyxl的Table对象目前没有提供你预想的table.sort()直接调用方法,可通过以下两种方式实现需求:

方案1:写入Excel前排序源数据(优先推荐)

直接在Python层面对原始数据排序后再写入表格,兼容性最好,所有办公软件打开都能直接看到排序后的结果:

import openpyxl
from openpyxl.worksheet.table import Table

# 注意原数据中的A/B为字符串时需要加引号
Data = [["A",20,1,1000],["B",20,1,1000],["A",20,1,900],["B",20,1,900],["A",20,1,1100],["B",20,1,1100]]
# 按第一列Name字段升序排序,需要降序时添加参数reverse=True
sorted_data = sorted(Data, key=lambda item: item[0])

wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Name','%','Mode','Value'])
# 写入排序后的数据
for row in sorted_data:
   ws.append(row)
table = Table(displayName = 'Results', ref ='A1:D7')
ws.add_table(table)
wb.save("result.xlsx")

方案2:给Excel表格添加自动排序规则

如果需要保留原始数据的存储顺序,只希望用户用微软Excel打开文件时默认按Name排序,可以给Table添加排序状态配置:

import openpyxl
from openpyxl.worksheet.table import Table
from openpyxl.worksheet.filters import SortCondition, SortState

Data = [["A",20,1,1000],["B",20,1,1000],["A",20,1,900],["B",20,1,900],["A",20,1,1100],["B",20,1,1100]]

wb = openpyxl.Workbook()
ws = wb.active
ws.append(['Name','%','Mode','Value'])
for row in Data:
   ws.append(row)
table = Table(displayName = 'Results', ref ='A1:D7')
# 配置排序规则:排序范围为所有数据行,按A列(Name列)升序
table.sortState = SortState(ref = "A2:D7")
table.sortState.sortCondition.append(SortCondition(descending=False, ref="A2:A7"))
ws.add_table(table)
wb.save("result.xlsx")

注意:该方案的排序规则仅在微软Excel中生效,WPS等其他办公软件可能不会触发自动排序,数据本身的存储顺序和原始数据一致。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:04