使用 google sheet API 和 gspread 编写专栏的最快方法
Quickest way to write a column with google sheet API and 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
有没有其他方法可以完全更改单元格值?
- 您想为 "Sheet1" 中 "A" 列的所有单元格赋值。
- 您想通过 python.
使用 gspread 来实现此目的
- 您想降低这种情况的处理成本。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
在这个回答中,我使用了gspread的batch_update
方法和SheetsAPI中的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 电子表格中的日期对象。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我有一个包含 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
有没有其他方法可以完全更改单元格值?
- 您想为 "Sheet1" 中 "A" 列的所有单元格赋值。
- 您想通过 python. 使用 gspread 来实现此目的
- 您想降低这种情况的处理成本。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
在这个回答中,我使用了gspread的batch_update
方法和SheetsAPI中的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 电子表格中的日期对象。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。