The Move member of the Worksheet object in the Excel object model, accessible via the xlwings library in Python, provides a programmatic way to reposition a worksheet within its workbook. This functionality is essential for organizing workbook structure, such as reordering sheets for logical presentation or moving a newly created sheet to a specific location. Unlike simply activating a sheet, the Move method physically changes the sheet’s index in the workbook’s tab order.
In xlwings, the method is accessed through a Sheet object (which represents a Worksheet). The core syntax for its API call is:
sheet.move(before, after)
Both parameters, before and after, are optional but mutually exclusive—you should specify only one. They accept either an xlwings Sheet object or an integer index.
before: The sheet before which the current sheet will be placed. If specified as aSheetobject, the moved sheet will be positioned immediately before that specific sheet. If specified as an integer (1-based index), the moved sheet will be moved to a position before the sheet currently at that index.after: The sheet after which the current sheet will be placed. If specified as aSheetobject, the moved sheet will be positioned immediately after that specific sheet. If specified as an integer (1-based index), the moved sheet will be moved to a position after the sheet currently at that index.
If neither before nor after is specified, Excel will create a new workbook containing only the moved worksheet. The following table summarizes the behavior:
| Parameter Provided | Resulting Action |
|---|---|
before=target | Moves the sheet to a position immediately before the target sheet. |
after=target | Moves the sheet to a position immediately after the target sheet. |
| Neither parameter | Moves the sheet to a new, single-sheet workbook. |
Code Examples:
- Move a sheet to the beginning of the workbook (before the first sheet):
import xlwings as xw
wb = xw.Book("report.xlsx")
sheet_to_move = wb.sheets["DataSheet"]
first_sheet = wb.sheets[0] # Index 0 refers to the first sheet
sheet_to_move.move(before=first_sheet)
- Move a sheet to the end of the workbook (after the last sheet):
import xlwings as xw
wb = xw.Book()
summary_sheet = wb.sheets.add("Summary")
last_sheet = wb.sheets[-1] # Index -1 refers to the last sheet
summary_sheet.move(after=last_sheet)
- Move a sheet to a specific index position (e.g., to become the third sheet):
import xlwings as xw
wb = xw.Book()
analysis_sheet = wb.sheets["Analysis"]
# To place it as the third sheet, move it before the current third sheet.
# Index is 1-based in the `move` method context for this operation.
analysis_sheet.move(before=3)
- Move a sheet relative to another named sheet:
import xlwings as xw
wb = xw.Book("dashboard.xlsx")
chart_sheet = wb.sheets["Charts"]
pivot_sheet = wb.sheets["PivotTables"]
# Place the Charts sheet right after the PivotTables sheet
chart_sheet.move(after=pivot_sheet)
Leave a Reply