我有一个包含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
还有其他方法可以完全更改单元格值吗?
答案 0 :(得分:2)
如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
在这个答案中,我使用了Sheets API中gspread的batch_update
方法和BatchUpdate方法的RepeatCellRequest方法。在这种情况下,可以通过一个API调用来实现上述情况。
在运行脚本之前,请设置变量spreadsheetId
和sheetName
。
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中的日期对象。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。