有没有一种方法可以使用googlesheets api和gspread格式化多个工作表

时间:2019-08-19 22:22:15

标签: python google-sheets-api gspread

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

batch_update()通过googlesheets api调用sheets.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)

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

1 个答案:

答案 0 :(得分: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"
        }
    })

参考:

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