使用列表对象的sorted方法可以对该列表的数据进行排序,并返回排序后的数据构成的列表,例如
code.python
>>> a=[1,6,3,9,2,7]
>>> b=sorted(a)
>>> b
[1, 2, 3, 6, 7, 9]
对于图6-11中处理前工作表中的数据,根据第一列的工号进行排序。思路是利用工作表数据创建一个字典,将工号作为键,将它对应的行数据作为值构造键值对。然后用sorted方法对工号构成的列表进行排序,排序后的工号对应的行数据值就是操作的结果。
code.python
1 import xlwings as xw
2 import os
3 root = os.getcwd()
4 app = xw.App(visible=True, add_book=False)
5 wb=app.books.open(root+r"/身份证号-排序.xlsx",read_only=False)
6 sht=wb.sheets(1)
7 ids=sht.range("A2",sht.cells(sht.cells(1,"A").end("down").row,"A")).value
8 id_sorted=sorted(ids) #对工号排序
9 rng=sht.range("A2",sht.cells(sht.cells(1,"B").end("down").row,"E"))
10 dicT={} #创建字典
11 for i in range(len(ids)): #遍历每行数据
12 dicT[rng[i,0].value]=rng.rows(i+1).value #工号为键,行数据为值
13 num=1
14 sht2=wb.sheets(2)
15 for i in range(len(id_sorted)): #在第2个工作表中写入排序后的数据
16 num+=1
17 sht2.cells(num,"A").value=dicT[id_sorted[i]] #键为排序后的工号
第1-5行的说明同6.1.1小节的代码说明。
第6-7行获取活动工作表,用range属性获取第一列工号数据到列表ids。
第8行对列表ids中的数据进行排序,返回排序后的列表id_sorted。
第9行用range属性获取第一行以外的数据所在的区域rng。
第10行创建空字典dicT。
第11-12行用一个for循环往字典dicT中添加键值对。将工号作为键值对的键,将工号所在的行数据作为键值对的值。
第13-17行使用一个for循环,将排序后的工号作为键去获取对应的行数据值,逐个输出到第2个工作表中。
在Python IDLE文件脚本窗口,在"Run"菜单中单击"Run Module"选项,数据排序结果如图6-11中处理后工作表中所示。
图6-11 数据排序