在项目进行时,发现比较细的数据往往是最初进行处理和分析的,根据不同的维度统计和分析数据往往是根据最初的数据进行的,所以表格的数据往往跟我们的顺序是相反的,或者跟我们需求的顺序不一致。
排序的方法有两种:
- 第一种:所有的完成之后单独进行排序,此时如果是新建的工作簿比较方便。
- 第二种:在建立sheet的时候规定其位置,此方法可以用在新建的和打开的旧的的工作簿。
函数: move_sheet
- 语法:
move_sheet(title,n)
# title :sheet名称
# n:负数表示向左移动,正数表示向右移动,数字表示移动几个位置
- 实例:新建的工作簿
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = 'sheet1'
new_worksheet_summary = wb.create_sheet('sheet2',2)
# new_worksheet_summary.title = 'summary'
PN = wb.create_sheet('sheet3',1)
Project = wb.create_sheet()
Project.title = 'sheet4'
sort_lst = wb.sheetnames
print(sort_lst)
# output
#['sheet1', 'sheet3', 'sheet2', 'sheet4']
desired_order = ['sheet4','sheet3','sheet2','sheet1'] # 以你期望的顺序列出工作表的名称
# 根据给定的顺序,重新排列工作表
for idx, sheet_name in enumerate(desired_order, 1):
wb.move_sheet(sheet_name, idx)
sort_lst = wb.sheetnames
print(sort_lst)
# output
# ['sheet4', 'sheet3', 'sheet2', 'sheet1']
- 实例二:已经有的excel文件
from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook(r'.\test.xlsx') sort_lst = wb.sheetnames print(sort_lst) # output #['sheet4', 'sheet3', 'sheet2', 'sheet1'] desired_order = ['sheet2','sheet1','sheet4','sheet3'] # 以你期望的顺序列出工作表的名称 # 根据给定的顺序,重新排列工作表 for idx, sheet_name in enumerate(desired_order, 1): wb.move_sheet(sheet_name, idx) sort_lst = wb.sheetnames print(sort_lst) # output # ['sheet2', 'sheet1', 'sheet4', 'sheet3'] wb.save(r'.\test2.xlsx')
直接在创建sheet的时候指定sheet的位置
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = 'sheet1'
new_worksheet_summary = wb.create_sheet('sheet2',2)
# new_worksheet_summary.title = 'summary'
PN = wb.create_sheet('sheet3',1)
Project = wb.create_sheet()
Project.title = 'sheet4'
sort_lst = wb.sheetnames
sort_lst
总结:两种方案各自有各自的优缺点,使用move_sheet进行调整sheet的顺序的时候会存在一些bug,主要是在打开工作簿的时候会出现明明已经设定了顺序,但是保存之后的exeel文件中sheet的顺序不对。当使用在创建sheet的时候就设置sheet的位置,后期调整会很麻烦。
如果哪个大神可以给出解决第一种方案存在的bug的方案,小弟在此抱大腿。