【问题标题】:How can I change the color of a worksheet's tab如何更改工作表选项卡的颜色
【发布时间】:2020-12-17 01:02:09
【问题描述】:

我有一个 python 脚本,它从外部资源中提取数据并将数据添加到 Google 表格。在大多数情况下,我一切正常,除了我想更改选项卡的颜色以表示脚本状态。

整个过程从复制工作表中的现有选项卡开始。默认情况下,模板选项卡具有黑色突出显示。然后我想将黑色更改为另一种颜色以显示数据收集正在进行中。完成后,根据数据结果将颜色更改为绿色或红色。

但是我找不到如何更改颜色的工作示例。这是我目前所拥有的:

    title = 'Duplicate'
    template_id = 1000

    sheet = open_worksheet() # does all the auth/credential work
    sheet.duplicate_sheet(template_id, insert_sheet_index=0, new_sheet_name=title)
    new_tab = sheet.worksheet(title)

    body = {
        "requests": [
            {
                "updateSheetProperties": {
                    "properties": {
                        "sheetId": 1001,
                        "title": title,
                        "tabColor": {
                            "red": 1.0,
                            "green": 0.3,
                            "blue": 0.4
                        }
                    },
                    "fields": "*"
                }
            }
        ]
    }

    try:
        res = sheet.batch_update(body)
        # res = new_tab.batch_update(body)
        pprint(res)
    except gspread.exceptions.APIError as gea:
        pprint(gea.args[0], width=100)

如果我尝试针对new_tab 指针运行batch_update(),我会得到:

dict(vr, range=absolute_range_name(self.title, vr['range']))
TypeError: string indices must be integers

如果我对整个 sheet 运行它,我会得到:

{'code': 400,
 'message': "Invalid requests[0].updateSheetProperties: You can't delete all the rows on the sheet.",
 'status': 'INVALID_ARGUMENT'}

如何修正我的请求,以便正确更新单个选项卡?

这是Google Sheet APISheet properties 的链接,我一直在其中查找请求的外观。

【问题讨论】:

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


    【解决方案1】:

    我相信你的目标如下。

    • 您想使用 gspread 更改 Google 电子表格的标签颜色。
    • 您想使用sheet.duplicate_sheet(template_id, insert_sheet_index=0, new_sheet_name=title) 插入新工作表并希望更改新工作表的标签颜色。

    修改点:

    • 在这种情况下,可以使用new_tab.id 检索工作表 ID。您可以将此值用于请求正文。
    • 在你的情况下,我认为tabColor而不是*可以用作fields的值。
      • 我认为这可能是您的问题的原因。因为在使用*时,除了tabColor之外的其他字段也会发生变化。

    当以上几点反映到你的脚本中时,它变成如下。

    修改脚本:

    请修改body如下再测试。

    body = {
        "requests": [
            {
                "updateSheetProperties": {
                    "properties": {
                        "sheetId": new_tab.id,
                        # "title": title, # In this case, I think that this might not be required to be used.
                        "tabColor": {
                            "red": 1.0,
                            "green": 0.3,
                            "blue": 0.4
                        }
                    },
                    "fields": "tabColor"
                }
            }
        ]
    }
    

    参考资料:

    【讨论】:

    • 我有一个后续问题。您将发送什么值来重置颜色;换句话说,删除所有颜色。发送一个空的“tabColor”字典以及将红色、绿色、蓝色设置为 0(或负数)会将颜色更改为黑色。我没有看到任何关于如何取消设置颜色的文档
    • @MivaScott 关于你的新问题,我想支持你。但是您的评论问题是新问题,这与您的问题不同。那么您可以将其发布为新问题吗?因为当您的初始问题被评论更改时,看到您的问题的其他用户会感到困惑。而且,我认为您的新问题将对其他用户有用。通过将其发布为新问题,包括我在内的用户可以想到您的新问题。如果你能合作解决你的新问题,我很高兴。你能合作解决你的新问题吗?
    • 这里是new question
    • @MivaScott 感谢您的回复。我提出了一个答案。你能确认一下吗?
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多