用Google Shee API和gspread编写列的最快方法

时间:2019-11-24 21:54:35

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

我有一个包含6000行的列(sheet1!A:A),我想将今天的日期(todays_date)写入该列中的每个单元格。目前,它是通过在while循环中使用.values_update()方法来完成此操作的,但由于配额限制,这会花费太多时间并给出APIError。

x=0
while x <= len(column):
    sh.values_update(
        'Sheet1!A'+str(x),
        params={
            'valueInputOption': 'USER_ENTERED'
        } ,
        body={
            'values': todays_date]
        }
    )
    x+=1

还有其他方法可以完全更改单元格值吗?

1 个答案:

答案 0 :(得分:2)

  • 您要为“ Sheet1”中“ A”列中的所有单元格添加值。
  • 您想通过gspread和python实现此目的。
  • 您想减少这种情况的处理成本。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

在这个答案中,我使用了Sheets API中gspread的batch_update方法和BatchUpdate方法的RepeatCellRequest方法。在这种情况下,可以通过一个API调用来实现上述情况。

示例脚本:

在运行脚本之前,请设置变量spreadsheetIdsheetName

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sheetName = "Sheet1"  # Please set the sheet name.

sh = client.open_by_key(spreadsheetId)
sheetId = sh.worksheet(sheetName)._properties['sheetId']
todays_date = (datetime.datetime.now() - datetime.datetime(1899, 12, 30)).days
requests = [
    {
        "repeatCell": {
            "range": {
                "sheetId": sheetId,
                "startRowIndex": 0,
                "startColumnIndex": 0,
                "endColumnIndex": 1
            },
            "cell": {
                "userEnteredValue": {
                    "numberValue": todays_date
                },
                "userEnteredFormat": {
                    "numberFormat": {
                        "type": "DATE",
                        "pattern": "dd/mm/yyyy"
                    }
                }
            },
            "fields": "userEnteredValue,userEnteredFormat"
        }
    }
]
res = sh.batch_update({'requests': requests})
print(res)
  • 在脚本上运行时,今天的日期以dd/mm/yyyy的格式显示在“ A”列的所有单元格中。
    • 如果要更改值和格式,请修改上面的脚本。
  • (datetime.datetime.now() - datetime.datetime(1899, 12, 30)).days,日期将转换为序列号。这样,该值可以用作Google Spreadsheet中的日期对象。

参考文献:

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