簡體   English   中英

Gspread 批量更新回溯

[英]Gspread batch update traceback

我在嘗試預填充谷歌表格過濾器然后執行 batch_update 時遇到問題。 我得到了正確的執行,導入了表,創建了過濾器。 當批量更新發生時,我得到一個我不明白的回溯。 我認為回溯可能來自我對 sheetId 進行編碼的方式。 如果有人對如何閱讀回溯有一些智慧,以便我可以解決潛在的問題,我將不勝感激。

我正在使用 python 3.10 和 gspread 5.3.2,我的過濾器設置來自我對底層 Google 表格 batchUpdate 方法的閱讀。

請指教,蒂姆

Gspread-batchUpdate Google 表格 batchUpdate

Traceback (most recent call last):
  File "/Users/peiffer/sre-cert-manager/scripts/get-certificates2.py", line 282, in <module>
    main()
  File "/Users/peiffer/sre-cert-manager/scripts/get-certificates2.py", line 268, in main
    import_csv_to_gsheet(output_file, google_api_credentials)
  File "/Users/peiffer/sre-cert-manager/scripts/get-certificates2.py", line 215, in import_csv_to_gsheet
    worksheet.batch_update(body)
  File "/Users/peiffer/venv/lib/python3.10/site-packages/gspread/utils.py", line 600, in wrapper
    return f(*args, **kwargs)
  File "/Users/peiffer/venv/lib/python3.10/site-packages/gspread/worksheet.py", line 848, in batch_update
    data = [
  File "/Users/peiffer/venv/lib/python3.10/site-packages/gspread/worksheet.py", line 849, in <listcomp>
    dict(vr, range=absolute_range_name(self.title, vr["range"])) for vr in data
TypeError: string indices must be integers

代碼片段如下:

#/usr/bin/env python3.10

name = 'MySheet'
gc = gspread.service_account(filename=path_to_credentials)

try:
    spreadsheet = gc.open(name)
except gspread.SpreadsheetNotFound:
    spreadsheet = gc.create(name)
    sharewith = '<email>'
    spreadsheet.share(sharewith, perm_type='user',
                      notify=True, role='writer')
results = gc.import_csv(spreadsheet.id, open(
    filepath, 'r').read().encode('utf-8'))
_ = results
worksheet = spreadsheet.sheet1
#
# Misc code here
#
worksheet.sort((1, 'asc'), range='A3:M16000')
worksheet.set_basic_filter(name='A2:M16000')
status_values_to_exclude = ["Expired", "Revoked"]
filter_specs = [{"columnIndex": 3, "filterCriteria": {"hiddenValues": status_values_to_exclude}}]
grid_range = gspread.utils.a1_range_to_grid_range('A2:M16000')
grid_range['sheetId'] = worksheet._properties['sheetId']
body = {"requests": [{"setBasicFilter": {"filter": {"range": grid_range, "filter_specs": filter_specs}}}]}
worksheet.batch_update(body)

您好,我相信您正在尋找的正確方法是batch_update ,但spreadsheet object 中,而不是在worksheet object 中。

看來您發送的是手動構建的完整請求, worksheet object 中的方法batch_update僅用於更新值。

你應該使用:

...
body = {"requests": [{"setBasicFilter": {"filter": {"range": grid_range, "filter_specs": filter_specs}}}]}
spreadsheet.batch_update(body)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM