复制范围内的值,清除范围内的现有值,最后粘贴复制的值

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')
}
  • 在您的脚本中,resultservice.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().

      的请求体

参考文献: