2 回答
TA贡献1862条经验 获得超7个赞
您想将一行追加到电子表格最后一行的下一行。
您想附加一行,如日期值
dd/mm/yyyy
、数据验证、0%
格式数和数字。您想将 的值
05/05/2019, UK, 8%, 9
作为显示值。您想使用 gspread 和 python 来实现这一点。
您已经能够使用 Sheets API 获取和放置电子表格的值。
如果我的理解是正确的,那么这个示例脚本怎么样?在这个示例脚本中,我使用了batch_update
gspread 的方法。gspread 的方法batch_upate
是 Sheets API 的电子表格.batchUpdate 方法。该行由 appendCells 请求附加。
示例脚本:
示例脚本如下。在运行脚本之前,请设置电子表格 ID 和工作表名称。在此脚本中,Tab One
用作工作表名称。
gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
body = {'requests':
[
{
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': 43590 # This is the serial number of "05/05/2019".
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': 'UK'
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': 0.08
}
},
{
'userEnteredValue':
{
'numberValue': 9
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
]
}
res = spreadsheet.batch_update(body)
print(res)
笔记:
当05/05/2019作为格式的日期输入时dd/mm/yyyy,请输入编号为43590序号。
添加:
当你想在for循环中使用请求体时,下面的脚本怎么样?batchUpdate 方法可以与数组一起使用。
gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
requests = []
for x in range(len(new_values)): # Please set "new_values".
body = {
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': new_values[x][0]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': new_values[x][1]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
},
{
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
requests.append(body)
res = spreadsheet.batch_update({'requests':requests})
print(res)
TA贡献1864条经验 获得超6个赞
我的版本基于 Tanaike 的回答:
#List of rows with values
new_values = [[43590,'UK',0.08,9],[43590,'DE',0.07,8]]
#connect to the google sheet and tab
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
#Add each value/row
for x in range(len(new_values)):
#print(new_values[x])
body = {'requests':
[
{
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': new_values[x][0] # This is the serial number of "05/05/2019".
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': new_values[x][1]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
},
{
'userEnteredValue':
{
'numberValue': new_values[x][3]
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
]
}
res = spreadsheet.batch_update(body)
身体在每个循环中都被拉动。如果您认为这不是最好的方法(循环身体),您可以评论任何替代方案。有一个循环并将values数组附加到 body 对象中可能更容易。
添加回答
举报