python - 对 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>,]
解决方案
我相信你的目标如下。
- 您想要重新对齐 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})
参考:
推荐阅读
- react-native - Expo React-Native App 在作为独立 APK 运行时不起作用
- html - R - 丹麦议会的 DOM 问题(网络抓取)
- android-databinding - LiveData vs Observable 数据对象
- regex - 正则表达式:用空格替换点后跟单词
- spring-mvc - 控制器中映射的url路径
- google-cloud-platform - 无法调试气流错误。尝试使用气流在 GCP 上构建数据管道
- c++ - 枚举中 ALL 标志的紧凑非重复方式,表示 C++ 中的位标志
- c - 通过给定的扫描集在 scanf() 检测太长的字符串
- r - 使用 sparklyr 时如何在不退出 RStudio 的情况下停止 Spark?
- javascript - jwplayer 8 带有前置视频和 xml 文件