利用openpy 方式打开sheet表,表格名称命名为ws, 同时选择多列数据B列, Q列,F列,J列,这几列中的内容进行判断后,按照多列数值排序排序要求,同时依据多列数据进行升序、降序排列,当 第一列出现重复值时按照第二列进行排序,当第二列出现重复值时按照 第三列进行排序,以此类推。 且每一列可以单独选择是升序还是降序,修改后的内容直接保存
时间: 2023-06-06 11:06:06 浏览: 75
好的,这个问题我可以回答。您可以使用openpyxl模块中的load_workbook函数来打开Excel文件,然后选择具体的sheet表。代码如下:
```
from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
ws = wb['表格名称']
```
接着,可以使用ws.iter_rows函数来获取需要排序的列,代码如下:
```
columns = ['B', 'Q', 'F', 'J']
rows = []
for row in ws.iter_rows(min_row=2):
rows.append([row[column+'{}'.format(row[0].row)].value for column in columns])
```
此时,rows中每个元素都是一个内含多列数据的列表,需要按照这些数据进行排序。您可以使用Python内置的sorted函数,代码如下:
```
sort_order = [(True, True), (False, True), (True, False), (False, False)] # 表示每列的排序方式
for i in range(len(columns)):
rows = sorted(rows, key=lambda x:x[i], reverse=sort_order[i][1])
if i > 0 and rows[0][i] == rows[1][i]: # 第i列数据重复
j = i - 1
while j >= 0 and rows[0][j] == rows[1][j]: # 不断往前找,直到找到不相等的一列
j -= 1
sort_order[i] = (sort_order[i][0], not sort_order[j][1]) # 更新该列的排序方式
```
最后,您可以将排序后的结果写入Excel文件中,代码如下:
```
for i, row in enumerate(rows):
for j in range(len(row)):
ws['{}{}'.format(columns[j], i+2)] = row[j]
wb.save('example.xlsx')
```
至此,排序并保存的过程就完成了。希望我的回答对您有所帮助。
阅读全文