You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用gspread对Google Sheets工作簿内的工作表自定义排序

解决方法

你遇到的排序异常是默认字符串字典序导致的:字符1的ASCII码小于2,因此week 10会排在week 2前面,需要改用自然排序逻辑提取表名中的数字做整数比较。gspread没有封装直接重排工作表的方法,但可以调用其封装的Google Sheets API原生batchUpdate接口实现顺序调整。

完整实现代码

import gspread
from oauth2client.service_account import ServiceAccountCredentials

GSHEETS_SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
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()

# 自定义排序规则
def sort_key(worksheet):
    title = worksheet.title
    # Documentation表固定排在最前
    if title == "Documentation":
        return (0, 0)
    # 匹配week X格式的表,提取周数转整数排序
    if title.startswith("week "):
        try:
            week_num = int(title.split(" ")[1])
            return (1, week_num)
        except (IndexError, ValueError):
            pass
    # 其他不符合规则的表排在最后,按名称字典序排序
    return (2, title)

# 对工作表列表做自然排序
sorted_worksheets = sorted(worksheet_list, key=sort_key)

# 生成重排请求
requests = []
for index, ws in enumerate(sorted_worksheets):
    requests.append({
        "updateSheetProperties": {
            "properties": {
                "sheetId": ws.id,
                "index": index
            },
            "fields": "index"
        }
    })

# 提交请求,完成工作表重排
sheet.batch_update({"requests": requests})

补充说明

如果有其他需要固定排序优先级的工作表,可直接在sort_key函数中补充对应规则即可,执行batch_update后工作簿的工作表顺序会实时同步。

内容的提问来源于stack exchange,提问作者Jonas Palačionis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:06:04