如何解决如何将复制的工作表移到第一位置?
我想使用openpyxl
用Python复制Excel工作表。但是,默认情况下将复制的工作表放在最后。我想要它在前面。与copy_worksheet
不同,create_sheet
不允许指定位置。我宁愿不必重新创建模板。
我已经考虑过对工作表进行排序,但是我不确定如何实现。
假设我有一个名为number.xlsx
的文件,并且要复制的工作表名为“空白”。
from openpyxl import load_workbook
from datetime import datetime
n = float(input("Number: "))
today = datetime.now()
m = today.month
d = today.day
y = str(today.year)
wb = load_workbook('number.xlsx')
if y in wb.sheetnames:
ws = wb[y]
ws.cell(row = 2 + d,column = 1 + m).value = n
wb.save('number.xlsx')
else:
ws = wb.copy_worksheet(wb["blank"]) #I want the copied sheet at the front,not the back
ws.title = y
ws.cell(row = 2 + d,column = 1 + m).value = n
wb.save('number.xlsx')
解决方法
我正在举一个例子
wb._sheets是您用来控制标签/工作表顺序的工具。 获取要重新排列的工作表的位置,并使用新位置修改工作表列表。
from openpyxl import Workbook
wb=Workbook()
# wb.create_sheet("Sheet")
wb.create_sheet("Sheet2")
wb.create_sheet("Sheet3")
wb.create_sheet("SheetA")
wb.create_sheet("ASheet")
wb.create_sheet("blank")
wb.save('book_original.xlsx')
blank_sheet_position = wb.worksheets.index(wb['blank'']) #get position of new sheet
blank_sheet_new_position = 0 #position where you want to move
sheets = wb._sheets.copy()
sheets.insert(blan_sheet_new_position,sheets.pop(blank_sheet_position))) #modifying the sheets list
wb._sheets = sheets
wb.save('book_myorder.xlsx')
,
您可以为此使用 move_sheet(sheet,offset=0)
方法。这里的偏移量计算为“当前工作表索引”+偏移量。复制工作表会将工作表添加到工作簿的最后一个。所以你需要给负值才能将工作表移动到索引 0。
from openpyxl import load_workbook
wb = load_workbook("text.xlsx")
ws = wb.copy_worksheet(wb["sample"])
ws.title = "NewNameForCopiedSheet"
wb.move_sheet("NewNameForCopiedSheet",-(len(wb.sheetnames)-1))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。