首页 > 解决方案 > 对 google sheet 工作表中的工作表进行排序

问题描述

我正在从谷歌表格中读取数据,将数据写入谷歌表格,并希望重新排列工作表中的表格:

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>]

我想将其更改为:

[<Worksheet 'Documentation' id:35>,
 <Worksheet 'week 1' id:20>,
 <Worksheet 'week 2' id:15>]

我尝试搜索此功能,但无法在gspread文档中找到它。

更新

使用Tanaike 的答案后,顺序不一致:

[<Worksheet 'Documentation' id:35>,
 <Worksheet 'week 1' id:20>,
 <Worksheet 'week 10' id:150>,
 <Worksheet 'week 11' id:16>,
 <Worksheet 'week 2' id:115>,]

标签: pythongoogle-sheetsgoogle-sheets-apigspread

解决方案


我相信你的目标如下。

  • 您想要重新对齐 Google 电子表格中的工作表。
  • 您不想包含第一个工作表。您想按工作表名称对除第一个选项卡之外的其他工作表进行排序。
  • 您想使用 gspread for python 来实现这一点。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

在此修改中,除了第一个选项卡之外的工作表按 batchUpdate 方法排序。

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})

参考:


推荐阅读