如何使用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
相关产品推荐
相关产品推荐

