Python 使用xlwings库操作excel的简明实践分享之实用的排序功能

459 阅读2分钟

排序是Excel中常见的一种功能,可以将一个凌乱的数据整合成一个规则的数据。本篇向大家阐述xlwings是如何排序的,并做实践举例。

  

初始数据

惯例有个初始数据数据,好做参照

image.png

Excel中的操作

先选中数据列,再点击开始,排序与筛选,选择升序或降序,再扩展选定区域,排序即可。

image.png

结果:

image.png  

上面因为是选择的列,所以排序是行排序。

 


下面先选择行,再依照前面的顺序点击

image.png

你不会以为它会按照列进行排序吧,其实和上面的结果没有区别,他不支持这个想象中的功能。Excel里默认数据是按照行组织的,一行就是一个数据。

前文点击的列其实就是按照排序的那一列

 

xlwings中的排序

ws['A1'].api.Sort(Key1=ws['A1'].api, Order1=1,Orientation=1)

 

第一个A1是指的排序单元格范围,第二个A1是依据数据所在列,Order1=1表示升序,当值为2时为降序,Orientation是方向,只有1的时候是和Excel操作的功能一样。结果如下:

image.png

当Orientation设置为2时,会实现上面没有实现的那个想象中功能。

image.png

 

image.png

多重排序

Excel还有个功能,可以自定义排序,选择多个条件,按照级别排下去,Excel能实现的xlwings也能实现

ws['A1'].api.Sort(Key1=ws['A1'].api, Order1=1, Key2=ws['G1'].api, Order2=1, Orientation=1)

 

先按照A列排序,再对A列的相同的值按照G列排序。听起来很像高考排名,多门课程成绩的排序。

image.png

排序的范围详解

上面代码中第一个A1如果是单独出现,那就表示是A1单元格向下向右拓展的数据区域

比如这次设置A2

ws['A2'].api.Sort(Key1=ws['A1'].api, Order1=1, Orientation=1)

image.png

这一次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)

方向是反的也是没有问题的,效果一样