【问题标题】:Can I batch update multiple worksheet in a spreadsheet using gspread?我可以使用 gspread 批量更新电子表格中的多个工作表吗?
【发布时间】:2021-11-02 14:54:05
【问题描述】:
import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)
client = gspread.authorize(creds)

sh=client.open("kite")
s0=sh.get_worksheet(0)
s1=sh.get_worksheet(1)

s0.batch_update([
    {'range': 'A3', 'values':fin_5min},
    {'range': 'D3', 'values': fin_15min}
])

我想用与s0 相同的数据更新s1 工作表。如何使用 gspread 在单个请求中执行此操作?

【问题讨论】:

    标签: google-sheets google-sheets-api gspread


    【解决方案1】:

    问题和解决方法:

    在 Sheets API 中,我认为您的目标可以通过电子表格.values.batchUpdate 的方法来实现。但遗憾的是,目前阶段,gspread 中似乎没有包含这个方法。所以作为一种解决方法,我想建议使用requests模块的方法。

    当你的脚本被修改后,变成如下。

    修改脚本:

    client = gspread.authorize(creds)
    sh = client.open("kite")
    
    sheetTitles = [sh.get_worksheet(0).title, sh.get_worksheet(1).title]
    values = [{'range': 'A3', 'values': fin_5min}, {'range': 'D3', 'values': fin_15min}]
    reqs = [[{'range': "'" + t + "'!" + v['range'], 'values': v['values']} for v in values] for t in sheetTitles]
    res = requests.post(
        'https://sheets.googleapis.com/v4/spreadsheets/' + sh.id + '/values:batchUpdate',
        headers={"Authorization": "Bearer " + creds.get_access_token().access_token, "Content-Type": "application/json"}, # modified
        data=json.dumps({"data": sum(reqs, []), "valueInputOption": "USER_ENTERED"})
    )
    
    • 访问令牌是从creds 中的client = gspread.authorize(creds) 检索到的。
    • 在这种情况下,fin_5minfin_15min 的值需要是二维数组。请注意这一点。
    • 通过上述修改,values 的值被放入第一张和第二张表中。
    • 并且,在这个修改后的脚本中,请添加import requestsimport json

    参考:

    【讨论】:

    • 谢谢,只需要一点小改动,而不是creds.access_token,我不得不使用creds.get_access_token().access_token
    • @Tushar KZ 感谢您的回复。我很高兴你的问题得到了解决。根据您的回复,我对其进行了修改,因为这可能对遇到相同问题的其他用户也有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多