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

如何用Python将Excel数据按第三列值长度排序并写入新工作表?(优先用函数)

使用openpyxl实现按指定列值长度排序并写入工作表

方案1:写入工作表前先排序数据

如果还未将数据写入工作表,建议先对数据列表排序再写入,效率更高。

自定义排序函数结合openpyxl的示例代码:

from openpyxl import Workbook

def sort_data_by_pseq_length(data, reverse=False):
    # 按第三列(p_seq)的值长度排序,reverse=True为降序,默认升序
    # 转str处理避免非字符串类型(如数字)报错
    return sorted(data, key=lambda row: len(str(row[2])), reverse=reverse)

# 你的原始数据列表
raw_data = [
    ["产品A", "电子产品", "P001"],
    ["产品B", "家居用品", "P0"],
    ["产品C", "办公用品", "P0001"],
    ["产品D", "户外装备", "P00"]
]

# 创建新工作簿与工作表
wb = Workbook()
ws = wb.active
ws.title = "排序后数据"

# 执行排序
sorted_data = sort_data_by_pseq_length(raw_data)
# 若需要降序,使用:sorted_data = sort_data_by_pseq_length(raw_data, reverse=True)

# 写入排序后的数据
for row in sorted_data:
    ws.append(row)

# 保存文件
wb.save("sorted_data.xlsx")

方案2:对已写入工作表的数据排序

如果数据已经在工作表中,可读取数据后排序再重新写入:

from openpyxl import load_workbook

def sort_sheet_by_pseq_length(wb, sheet_name, has_header=True):
    ws = wb[sheet_name]
    # 读取工作表所有数据
    all_data = list(ws.iter_rows(values_only=True))
    if not all_data:
        return
    
    # 分离表头与数据行
    if has_header:
        header = all_data[0]
        data_rows = all_data[1:]
    else:
        header = []
        data_rows = all_data
    
    # 按第三列值长度排序
    sorted_rows = sorted(data_rows, key=lambda row: len(str(row[2])))
    
    # 清空原工作表内容
    ws.delete_rows(1, ws.max_row)
    
    # 重新写入表头(如果有)
    if header:
        ws.append(header)
    
    # 写入排序后的数据
    for row in sorted_rows:
        ws.append(row)

# 加载已有工作簿
wb = load_workbook("existing_data.xlsx")
# 对指定工作表执行排序(假设存在表头)
sort_sheet_by_pseq_length(wb, "原数据")
# 保存修改后的文件
wb.save("sorted_existing_data.xlsx")

关键说明

  • 代码中用str(row[2])转换第三列的值,确保即使该列是数字、日期等非字符串类型,也能正确计算长度。
  • 若不需要表头处理,将has_header参数设为False即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:15:32