首页 > 解决方案 > 如何在 Python 中使用 Google Sheets API 更新多个合并的单元格?

问题描述

我需要使用 Google Sheets API v4(无 gspread)通过 Python 批量更新多个合并单元格(使用空白信息)。我有这个代码:

blank = setValue("") <----- I set a variable with no data to delete all the info that the cell can contains
dataBlank = [
        ...
        {
            'range': 'AB83',
            'values': blank
        }
        {
            'range': 'BH75:BH82', # <------- I think here is the problem
            'values': blank
        } ...
    ]

body = {
        'valueInputOption': value_input_option,
        'data': dataBlank
    }
result = service.spreadsheets().values().batchUpdate(spreadsheetId=registro_id, body=body).execute()
print('{0} celdas borradas - Registro'.format(result.get('totalUpdatedCells')))

def setValue(value):
    rvalue = [value]
    avalue = [rvalue]
    return avalue

它运行,但在工作表中它只更新范围的第一个单元格,并且整个范围不会更新。我尝试使用'range' : 'BH75:BH82''range' : 'Sheet1!BH75:BH82'但无法更新整个范围。我需要使用批量更新,因为我需要检查性能并且不超过 Google Cloud 的报价限制。

我喜欢这个:

我明白了

只有第一个单元格被更新。如果我更新单个单元格或没有范围的合并单元格,它可以正常工作,但如果我使用范围更新则不起作用。

标签: pythongoogle-sheetsgoogle-sheets-api

解决方案


我相信你的目标如下。

  • 您想使用 Sheets API 中的 Method: spreadsheets.values.batchUpdate 方法将 Google 电子表格的第一个选项卡中zero的单元格放入。BH75:BH82
  • 您想使用 googleapis 和 python 来实现这一点。

为此,这个答案怎么样?

修改点:

  • 在 Sheets API 中 Method: spreadsheets.values.batchUpdate 方法的情况下,当您要将值放入单元格BH75:BH82时,必须是"values":[["sample"],["sample"],["sample"],["sample"],["sample"],["sample"],["sample"],["sample"]]
  • 在您的脚本中,"values":[["sample"]]使用了。这样,该值仅被放入第一个单元格。我认为这是您的问题的原因。

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:
'range': 'BH75:BH82',
'values': zero
至:
'range': 'BH75:BH82',
'values': [[value],[value],[value],[value],[value],[value],[value],[value]]
  • 不幸的是,从您的脚本中,我无法理解zero. 所以我用作value变量。如果你想放空,请声明value""
  • 这是一个简单的修改。因此,当然,您也可以[[value],[value],[value],[value],[value],[value],[value],[value]]使用脚本进行创建。

笔记:

  • 如果您想为很多单元格赋值,Sheets API 中的批处理更新方法的 RepeatCellRequest 可能会很有用。参考

参考:


推荐阅读