【问题标题】:Is there a way to format multiple worksheets using the googlesheets api and gspread有没有办法使用 googlesheets api 和 gspread 格式化多个工作表
【发布时间】:2019-08-19 22:22:15
【问题描述】:

我目前正在编写一个 python 程序,它从网站上抓取数据,然后将该信息写入谷歌电子表格。根据每行中包含的数据,数据被分成主电子表格内的不同工作表。我一直在使用 gspread 的 batch_update() 函数发送多个请求,但它只格式化 sheet1 而不会格式化后续页面。我该怎么做才能使所有工作表的格式都相同。

batch_update() 通过 googlesheets api 调用电子表格.batchUpdate() 方法,这应该会影响整个电子表格,而不是我不理解的第一个工作表

creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)
client = gspread.authorize(creds)
vt = client.open(sheetName)

formatRequests = []
formatRequests.append({
        "repeatCell" : {
            "range" : {
                "startColumnIndex" : 0,
                "endColumnIndex" : 1
            },
            "cell" : {
                "userEnteredFormat" : {
                    "numberFormat" : {
                        "type": "DATE",
                        "pattern" : "mmm dd, yyyy, hh:mm am/pm"
                    }
                }
            },
            "fields" : "userEnteredFormat.numberFormat"
        }
    })

#... A bunch of other formatting appends

body = {
        'requests' : formatRequests
    }
vt.batch_update(body)

这只会格式化电子表格中的第一页

【问题讨论】:

  • 我的回答是否向您展示了您想要的结果?你能告诉我吗?这对我学习也很有用。如果这可行,与您有相同问题的其他人也可以将您的问题作为可以解决的问题。如果您对我的回答有疑问,我深表歉意。到时候,可以问一下你现在的情况吗?我想学习解决你的问题。
  • 感谢您的回复!这让我得到了我需要的结果。当我浏览文档时,我不知何故认为 sheetId 指的是整个电子表格而不是每个单独的工作表,所以我没有必要输入。
  • 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。

标签: python google-sheets-api gspread


【解决方案1】:
  • 您想为电子表格中的所有工作表设置格式。
  • 您希望使用带有 gspread 的 Sheets API 来实现此目的。
  • 您已经能够使用 Sheets API 获取和放置值。

如果我的理解是正确的,那么这个修改呢?

修改点:

  • 在此修改中,首先从电子表格中检索所有工作表。然后使用检索到的工作表 ID 创建请求正文。

修改脚本:

请按如下方式修改您的脚本。

从:
formatRequests = []
formatRequests.append({
        "repeatCell" : {
            "range" : {
                "startColumnIndex" : 0,
                "endColumnIndex" : 1
            },
            "cell" : {
                "userEnteredFormat" : {
                    "numberFormat" : {
                        "type": "DATE",
                        "pattern" : "mmm dd, yyyy, hh:mm am/pm"
                    }
                }
            },
            "fields" : "userEnteredFormat.numberFormat"
        }
    })
到:
formatRequests = []
worksheet_list = vt.worksheets()  # Added
for sheet in worksheet_list:  # Added
    formatRequests.append({
        "repeatCell": {
            "range": {
                "startColumnIndex": 0,
                "endColumnIndex": 1,
                "sheetId": sheet.id  # Added
            },
            "cell": {
                "userEnteredFormat": {
                    "numberFormat": {
                        "type": "DATE",
                        "pattern": "mmm dd, yyyy, hh:mm am/pm"
                    }
                }
            },
            "fields": "userEnteredFormat.numberFormat"
        }
    })

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多