Какой объем необходим для использования функции findReplace в GoogleSheets API v4? - PullRequest
1 голос
/ 11 июня 2019

Я хочу использовать запрос findReplace в Google Sheets APIv4. Я настроил свою Сферу и запрос, как определено в руководстве по быстрому запуску Google для API Sheets в Python, и подтвердил, что API может общаться с моей электронной таблицей.

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#FindReplaceRequest


SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SHEET_ID = myspreadsheetid
creds = None
store = file.Storage('sheets_token.json')

if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = client.flow_from_clientsecrets('client_2_https.json', SCOPES)
        creds = tools.run_flow(flow, store, http=Http(disable_ssl_certificate_validation=True))
    with open('sheets_token.pickle', 'wb') as token:
        pickle.dump(creds, token)

adminService = build('sheets', 'v4', http=creds.authorize(Http(disable_ssl_certificate_validation=True)))

def findreplace_request(find, replacement):
  findreplace_request = {}
  findreplace_request['find'] = find
  findreplace_request['replacement'] = replacement
  findreplace_request['matchCase'] = True
  findreplace_request['matchEntireCell'] = True
  findreplace_request['searchByRegex'] = False
  findreplace_request['includeFormulas'] = False
  findreplace_request['sheetId'] = mysheetid
  allSheets = False
  request = {}
  request['findReplace'] = findreplace_request
  return request


body = {}
body.setdefault('requests',[]).append(findreplace_request('@mydate@','TODAY'))

response = adminService.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID, body=my_request).execute()   


Я четко установил область для чтения и записи в / из Google Sheets, но я не понимаю, почему я получаю сообщение об ошибке, в котором говорится, что область не установлена.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\wnh659\AppData\Local\Continuum\anaconda3\lib\site-packages\googleapiclient\_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "C:\Users\wnh659\AppData\Local\Continuum\anaconda3\lib\site-packages\googleapiclient\http.py", line 851, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 400 when requesting https://sheets.googleapis.com/v4/spreadsheets/1Sx0CJJo-b6Z6JUaQEQ6cJ3Yxtjv3z9BtHN9EHl0-0jU:batchUpdate?alt=json return
ed "Invalid requests[0].findReplace: scope not set.">

1 Ответ

0 голосов
/ 11 июня 2019
  • Вы хотите использовать запрос Sheet API FindReplace с использованием Python.
  • Вы уже можете изменять таблицу с помощью API листов.

Если я понимаю,правильно, как насчет этой модификации?Я думаю, что причина ошибки Invalid requests[0].findReplace: scope not set. в том, что область для замены значения не определена.В вашем теле запроса свойства range, sheetId и allSheets не используются.Так как насчет следующей модификации?

Модифицированный скрипт:

С:
def findreplace_request(find, replacement):
  findreplace_request = {}
  findreplace_request['find'] = find
  findreplace_request['replacement'] = replacement
  findreplace_request['matchCase'] = True
  findreplace_request['matchEntireCell'] = True
  findreplace_request['searchByRegex'] = False
  findreplace_request['includeFormulas'] = False
  sheetId = mysheetid
  allSheets = False
  request = {}
  request['findReplace'] = findreplace_request
  return request
Кому:
def findreplace_request(find, replacement):
  findreplace_request = {}
  findreplace_request['find'] = find
  findreplace_request['replacement'] = replacement
  findreplace_request['matchCase'] = True
  findreplace_request['matchEntireCell'] = True
  findreplace_request['searchByRegex'] = False
  findreplace_request['includeFormulas'] = False

  findreplace_request['sheetId'] = mysheetid  # Added

  allSheets = False
  request = {}
  request['findReplace'] = findreplace_request
  return request
  • В этой модификации find ищется из листа mysheetid.Если вы хотите найти значение на всех листах, используйте свойство allSheets вместо sheetId.

Примечание:

  • Если значение свойстваявляется логическим, когда свойство не используется, значение используется как False значения по умолчанию.
  • В вашем сценарии, я думаю, что следующая модификация также может работать.

    body = {}
    body.setdefault('requests',[]).append(findreplace_request('@mydate@','TODAY'))
    response = adminService.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID, body=body).execute()
    

Ссылка:

Если я неправильно понял ваш вопрос, и это не было результатомВы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...