【问题标题】:How can I update multiple merged cells with Google Sheets API in Python?如何在 Python 中使用 Google Sheets API 更新多个合并的单元格?
【发布时间】:2020-04-30 18:07:51
【问题描述】:

我需要使用 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 的报价限制。

我喜欢这个:

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

【问题讨论】:

    标签: python google-sheets google-sheets-api


    【解决方案1】:

    我相信你的目标如下。

    • 您希望使用 Sheets API 中的 Method: spreadsheets.values.batchUpdate 方法将 zero 放入 Google 电子表格第一个选项卡中的单元格 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 中的 batchUpdate 方法的 RepeatCellRequest 可能会很有用。 Ref

    参考:

    【讨论】:

    • 感谢您的帮助,从工作表中擦除数据的另一种方法是使用方法batchClear() 如下:dataBlank = [ 'BL83', 'AP75:AP82', 'BH75:BH82', 'CF75:CF82', 'AB85:CF91', 'AP85:AP91', 'BH85:BH91', 'CF85:CF91', 'AB95', 'AT95', 'BL95', 'AC97', 'AT97', 'BI97', 'CA97', 'D100:BN115', 'B117:BG117' ] body = { 'ranges': dataBlank } result = service.spreadsheets().values().batchClear(spreadsheetId=registro_id, body=body).execute()
    • @alexchvrches 感谢您的回复和补充信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多