Python + Sheet |我可以知道使用 BatchUpdate 更改 BGcolor 的语法吗?

Python + Sheet | May I know the syntax to change BGcolor using BatchUpdate?

以下 python 代码是 BatchUpdate:

  1. 将数字 'x' 添加到行
  2. 的 H 列
  3. 将整行更改为绿色

可以涉及 1 行或多行。 如何更改背景颜色? 另外,如果 rowListTH[] 只有 1 个项目,此代码是否仍然有效?

ssName = ssTH.title + '!'
request_body = {
    "valueInputOption": "RAW",
    "data": [
        {
            'range': ssName + 'H'+rowListTH[-1]+':H'+rowListTH[0],
            'values': [
                {
                    [str(x)],
                    "backgroundColor": {"green": 1}
                }
                ]
        },
    ]
}
service.spreadsheets().values().batchUpdate(
    spreadsheetId = ssID,
    body = request_body
).execute()

==================================编辑========== ========================

我已经进行了更改,但我无法更新为整行或整列着色,它总是只会为单个单元格着色。 请检查我哪里做错了

我想为第 5-12 行的 A 到 I 列着色。 对于我的结果,我只将单元格 A5 着色。

request_body = {
"updateCells":{
    "rows":[
        {
            "values":[
                {
                    "userEnteredFormat":{
                        "backgroundColor":{
                            "red": 0,
                            "green": 1,
                            "blue": 0,
                            "alpha": 1
                        }
                    }
                }
            ]
        }
            ],
            "fields":"userEnteredFormat.backgroundColor",
            "range":{
                "sheetId": TH_gid,
                "startRowIndex": 4,
                "endRowIndex": 11,
                "startColumnIndex": 0,
                "endColumnIndex": 9
            }
        }
    }
body = {
    "requests": request_body
}
response = service.spreadsheets().batchUpdate(spreadsheetId=ssID, body=body).execute()

答案:

要更改单元格的背景颜色,您需要使用 spreadsheets.batchUpdate 端点,而不是 spreadsheets.values.batchUpdate 端点。

请求示例:

request_body = {
    "updateCells":{
        "rows":[
            {
                "values":[
                    {
                        "userEnteredFormat":{
                            "backgroundColor":{
                                "red": 0,
                                "green": 1,
                                "blue": 0,
                                "alpha": 1
                            }
                        }
                    }
                ]
            }
        ],
        "fields":"userEnteredFormat.backgroundColor",
        "range":{
            "sheetId": sheet-id,
            "startRowIndex": 0,
            "endRowIndex": 0,
            "startColumnIndex": 0,
            "endColumnIndex": 1
        }
    }
}

body = {
    "requests": request_body
}

response = service.spreadsheets().batchUpdate(spreadsheetId=ss.id, body=body).execute()

您需要更改的内容:

  • redgreenbluealpha 值。 As per the documentation,这些是 RGB 色彩空间中 0 和 1 之间的浮点表示,分母为 255。
    • 例如,对于 #FFFFFF255 255 255 的白色,您将分别使用 redgreenblue
  • Sheet ID - 这不是电子表格 ID,这是当您在浏览器中查看电子表格时在 URL 中看到的 #gidSheet1 默认情况下总是 0,但任何添加的工作表都是随机的。这个值是一个整数。
  • 开始和结束的列和行:
    • startRowIndexendRowIndexstartColumnIndexendColumnIndex 是从 0 开始索引的。这意味着如果您只想为单元格 A1 着色,那么您的请求将是:
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
"endColumnIndex": 1

要为整个列着色,您首先需要找出行数并提出以下请求(假设列 A):

"startRowIndex": 0,
"endRowIndex": number_of_rows - 1,
"startColumnIndex": 0,
"endColumnIndex": 1

由于这是一个与您使用的不同的端点,因此需要将其作为单独的 HTTP 请求进行。

参考文献: