复制范围内的值,清除范围内的现有值,最后粘贴复制的值
Copy values from a range, clear existing values in a range and finally paste the copied values
如标题所述,我正在尝试复制一个范围内的值,清除另一个范围内可能存在的值,最后将复制的值粘贴到一个范围内:
def copy_clear_paste(sheet_id, get_page_copy_name, range_copy, get_page_clear_name, range_clear, paste_page_name, range_paste):
with open('my_user_agent.txt') as f:
my_user_agent = f.read()
headers = {
'User-Agent': my_user_agent
}
CLIENT_SECRET_FILE = 'client_secrets.json'
API_NAME = 'sheets'
API_VERSION = 'v4'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
spreadsheet_id = sheet_id
range_names = get_page_copy_name + '!' + range_copy
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id, range=range_names).execute()
range_names_1 = get_page_clear_name + '!' + range_clear
result_1 = service.spreadsheets().values().clear(
spreadsheetId=spreadsheet_id, range=range_names_1).execute()
worksheet_name = paste_page_name
cell_range_insert = range_paste
value_range_body = {
'majorDimension': 'ROWS',
'values': result
}
service.spreadsheets().values().append(
spreadsheetId=spreadsheet_id,
valueInputOption='USER_ENTERED',
range=worksheet_name + '!' + cell_range_insert,
body=value_range_body
).execute()
当我尝试执行这一系列步骤时返回的错误是:
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Combinados%21A2:append?valueInputOption=USER_ENTERED&alt=json returned "Invalid JSON payload received. Unknown name "range" at 'data.values': Cannot find field.
Invalid JSON payload received. Unknown name "majorDimension" at 'data.values': Cannot find field.". Details: "[{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'data.values', 'description': 'Invalid JSON payload received. Unknown name "range" at \'data.values\': Cannot find field.'}, {'field': 'data.values', 'description': 'Invalid JSON payload received. Unknown name "majorDimension" at \'data.values\': Cannot find field.'}]}]">
我应该如何继续才能完成这项顺序工作?
在你的脚本中,做如下修改怎么样?
发件人:
value_range_body = {
'majorDimension': 'ROWS',
'values': result
}
收件人:
value_range_body = {
'majorDimension': 'ROWS',
'values': result.get('values')
}
- 在您的脚本中,
result
是 service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_names).execute()
的返回值。该值不能直接用于service.spreadsheets().values().append()
的请求体。我认为这就是您的错误消息的原因。
注:
作为另一种修改方式,我想你也可以使用下面的修改方式。
到
del result['range']
value_range_body = result
service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_names).execute()
returns {'range': '###', 'majorDimension': 'ROWS', 'values': [[###]]}
的对象。所以在你的情况下,通过删除 range
属性,我认为该对象可以用作 service.spreadsheets().values().append()
.
的请求体
参考文献:
如标题所述,我正在尝试复制一个范围内的值,清除另一个范围内可能存在的值,最后将复制的值粘贴到一个范围内:
def copy_clear_paste(sheet_id, get_page_copy_name, range_copy, get_page_clear_name, range_clear, paste_page_name, range_paste):
with open('my_user_agent.txt') as f:
my_user_agent = f.read()
headers = {
'User-Agent': my_user_agent
}
CLIENT_SECRET_FILE = 'client_secrets.json'
API_NAME = 'sheets'
API_VERSION = 'v4'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
spreadsheet_id = sheet_id
range_names = get_page_copy_name + '!' + range_copy
result = service.spreadsheets().values().get(
spreadsheetId=spreadsheet_id, range=range_names).execute()
range_names_1 = get_page_clear_name + '!' + range_clear
result_1 = service.spreadsheets().values().clear(
spreadsheetId=spreadsheet_id, range=range_names_1).execute()
worksheet_name = paste_page_name
cell_range_insert = range_paste
value_range_body = {
'majorDimension': 'ROWS',
'values': result
}
service.spreadsheets().values().append(
spreadsheetId=spreadsheet_id,
valueInputOption='USER_ENTERED',
range=worksheet_name + '!' + cell_range_insert,
body=value_range_body
).execute()
当我尝试执行这一系列步骤时返回的错误是:
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Combinados%21A2:append?valueInputOption=USER_ENTERED&alt=json returned "Invalid JSON payload received. Unknown name "range" at 'data.values': Cannot find field.
Invalid JSON payload received. Unknown name "majorDimension" at 'data.values': Cannot find field.". Details: "[{'@type': 'type.googleapis.com/google.rpc.BadRequest', 'fieldViolations': [{'field': 'data.values', 'description': 'Invalid JSON payload received. Unknown name "range" at \'data.values\': Cannot find field.'}, {'field': 'data.values', 'description': 'Invalid JSON payload received. Unknown name "majorDimension" at \'data.values\': Cannot find field.'}]}]">
我应该如何继续才能完成这项顺序工作?
在你的脚本中,做如下修改怎么样?
发件人:
value_range_body = {
'majorDimension': 'ROWS',
'values': result
}
收件人:
value_range_body = {
'majorDimension': 'ROWS',
'values': result.get('values')
}
- 在您的脚本中,
result
是service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_names).execute()
的返回值。该值不能直接用于service.spreadsheets().values().append()
的请求体。我认为这就是您的错误消息的原因。
注:
作为另一种修改方式,我想你也可以使用下面的修改方式。
到
del result['range'] value_range_body = result
的请求体service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range_names).execute()
returns{'range': '###', 'majorDimension': 'ROWS', 'values': [[###]]}
的对象。所以在你的情况下,通过删除range
属性,我认为该对象可以用作service.spreadsheets().values().append()
.