如何将复制的工作表移动到第一个位置?
How to move a copied worksheet to the first position?
我想使用 openpyxl
在 Python 中复制一个 Excel 工作表。但是,它默认将复制的工作表放在末尾。我想要它在前面。与 create_sheet
不同,copy_worksheet
不允许指定位置。我宁愿不必重新创建模板。
我考虑过对工作表进行排序,但不确定如何实现。
假设我有一个名为 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就是你用来控制tabs/sheets顺序的。
获取要重新排列的 sheet 的位置,并用新位置修改 sheet 的列表。
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)
方法。这里的偏移量计算为“当前sheet索引”+偏移量。复制工作 sheet 会将 sheet 添加到工作簿的最后。所以你需要给负值移动 sheet 到索引 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))
我想使用 openpyxl
在 Python 中复制一个 Excel 工作表。但是,它默认将复制的工作表放在末尾。我想要它在前面。与 create_sheet
不同,copy_worksheet
不允许指定位置。我宁愿不必重新创建模板。
我考虑过对工作表进行排序,但不确定如何实现。
假设我有一个名为 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就是你用来控制tabs/sheets顺序的。 获取要重新排列的 sheet 的位置,并用新位置修改 sheet 的列表。
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)
方法。这里的偏移量计算为“当前sheet索引”+偏移量。复制工作 sheet 会将 sheet 添加到工作簿的最后。所以你需要给负值移动 sheet 到索引 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))