排序是Excel中常见的一种功能,可以将一个凌乱的数据整合成一个规则的数据。本篇向大家阐述xlwings是如何排序的,并做实践举例。
初始数据
惯例有个初始数据数据,好做参照
Excel中的操作
先选中数据列,再点击开始,排序与筛选,选择升序或降序,再扩展选定区域,排序即可。
结果:
上面因为是选择的列,所以排序是行排序。
下面先选择行,再依照前面的顺序点击
你不会以为它会按照列进行排序吧,其实和上面的结果没有区别,他不支持这个想象中的功能。Excel里默认数据是按照行组织的,一行就是一个数据。
前文点击的列其实就是按照排序的那一列
xlwings中的排序
ws['A1'].api.Sort(Key1=ws['A1'].api, Order1=1,Orientation=1)
第一个A1是指的排序单元格范围,第二个A1是依据数据所在列,Order1=1表示升序,当值为2时为降序,Orientation是方向,只有1的时候是和Excel操作的功能一样。结果如下:
当Orientation设置为2时,会实现上面没有实现的那个想象中功能。
多重排序
Excel还有个功能,可以自定义排序,选择多个条件,按照级别排下去,Excel能实现的xlwings也能实现
ws['A1'].api.Sort(Key1=ws['A1'].api, Order1=1, Key2=ws['G1'].api, Order2=1, Orientation=1)
先按照A列排序,再对A列的相同的值按照G列排序。听起来很像高考排名,多门课程成绩的排序。
排序的范围详解
上面代码中第一个A1如果是单独出现,那就表示是A1单元格向下向右拓展的数据区域
比如这次设置A2
ws['A2'].api.Sort(Key1=ws['A1'].api, Order1=1, Orientation=1)
这一次A1所在行就没有参与到排序过程中
范围还可以自己划定选区。
ws['A2:F5'].api.Sort(Key1=ws['A1'].api, Order1=1, Orientation=1)
这里选取必须划到精确范围,他也只对这部分进行排序,另外选取的key也必须在这个范围里
ws['A2:F1'].api.Sort(Key1=ws['A1'].api, Order1=1, Orientation=1)
方向是反的也是没有问题的,效果一样