I am reading data from google sheets, writing data to google sheets, and want to rearrange the sheets inside the worksheet:
CLIENT_SECRET_GOOGLE_SHEETS = r"client_secret_google_sheets.json"
creds = ServiceAccountCredentials.from_json_keyfile_name(CLIENT_SECRET_GOOGLE_SHEETS, GSHEETS_SCOPES)
client = gspread.authorize(creds)
sheet = client.open("my_worksheet")
worksheet_list = sheet.worksheets()
# worksheet_list
[<Worksheet 'Documentation' id:35>,
<Worksheet 'week 2' id:15>,
<Worksheet 'week 1' id:20>]
I would like to change it to:
[<Worksheet 'Documentation' id:35>,
<Worksheet 'week 1' id:20>,
<Worksheet 'week 2' id:15>]
I tried searching for this functionality but was not able to find it in gspread
documentation.
UPDATE
After using Tanaike's answer the order is not consistent:
[<Worksheet 'Documentation' id:35>,
<Worksheet 'week 1' id:20>,
<Worksheet 'week 10' id:150>,
<Worksheet 'week 11' id:16>,
<Worksheet 'week 2' id:115>,]
I believe your goal is as follows.
In this case, how about the following sample script?
In this modification, the sheets except for the 1st tab are sorted by the batchUpdate method.
client = ### # Please use your client in your script.
spreadsheetId = "###" # Please set the Spreadsheet ID.
# 1. Retrieve all sheets.
spreadsheet = client.open_by_key(spreadsheetId)
sheets = spreadsheet.worksheets()
sheets.pop(0)
# 2. Sort sheets except for 1st tab.
sortedSheets = sorted(sheets, key=lambda x: x.title)
# 3. Create request body.
requests = []
for i, sheet in enumerate(sortedSheets):
requests.append({
"updateSheetProperties": {
"properties": {
"index": i + 1,
"sheetId": sheet.id
},
"fields": "index"
}
})
# 4. Request to Sheets API.
res = spreadsheet.batch_update({"requests": requests})