【问题标题】:Google spreadsheet api batchupdate using python使用 python 的谷歌电子表格 api batchupdate
【发布时间】:2023-01-12 13:08:52
【问题描述】:

我正在尝试使用 batchupdate 更新多个单元格值。但是给我以下错误

我的代码:

import gspread

gc = gspread.service_account(filename='gdrive_cred.json')
sh = gc.open('SmartStraddle').sheet1

stock_name = "NIFTY50"
stock_price = 15000

batch_update_values = {
    'value_input_option': 'USER_ENTERED',
    'data': [
        {
            'range': "A1",
            'values': [stock_name]
        },
        {
            'range': "B2",
            'values': [stock_price]
        }
    ],
}

sh.batch_update(batch_update_values)

错误信息:

Traceback (most recent call last):
  File "*\interactiveshell.py", line 3433, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-028b1369fa03>", line 23, in <module>
    sh.batch_update(batch_update_values)
  File "*\utils.py", line 702, in wrapper
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "*\worksheet.py", line 1152, in batch_update
    data = [
           ^
  File "*\worksheet.py", line 1153, in <listcomp>
    dict(vr, range=absolute_range_name(self.title, vr["range"])) for vr in data
                                                   ~~^^^^^^^^^
TypeError: string indices must be integers, not 'str'

我正在关注 this google 文档,但不确定如何正确构造 data': [] 字段。

【问题讨论】:

    标签: python python-3.x google-sheets google-sheets-api gspread


    【解决方案1】:

    我猜你想使用batch_update(data, **kwargs)

    修改点:

    • 看了batch_update(data, **kwargs)的文档,好像data的说法是这样的。

        batch_update_values = [
            {"range": "A1", "values": [[stock_name]]},
            {"range": "B2", "values": [[stock_price]]},
        ]
      
    • value_input_option 需要作为参数。

    当这些点都体现在你的脚本中时,下面的修改怎么样?

    修改脚本:

    从:

    batch_update_values = {
        'value_input_option': 'USER_ENTERED',
        'data': [
            {
                'range': "A1",
                'values': [stock_name]
            },
            {
                'range': "B2",
                'values': [stock_price]
            }
        ],
    }
    
    sh.batch_update(batch_update_values)
    

    到:

    batch_update_values = [
        {"range": "A1", "values": [[stock_name]]},
        {"range": "B2", "values": [[stock_price]]},
    ]
    sh.batch_update(batch_update_values, value_input_option="USER_ENTERED")
    
    • 运行此修改后的脚本时,NIFTY5015000 的值分别放入单元格“A2”和“B2”。

    参考:

    【讨论】: