Добавление именованного диапазона в лист Google - PullRequest
0 голосов
/ 05 октября 2018

Я пишу приложение на Python, которое читает данные из таблиц Google, но я также хочу иметь возможность программно добавлять именованные диапазоны, чтобы уменьшить очень утомительную и подверженную ошибкам печать.Лист пуст, за исключением значения foo в ячейке B1.Часть чтения работает, как показано в этом примере, но при попытке записи я получаю 401, НЕАУТЕНТИФИЦИРОВАННЫЙ.И это несмотря на то, что я использую область действия https://www.googleapis.com/auth/spreadsheets, как описано в https://developers.google.com/sheets/api/guides/authorizing

. Для записи диапазона я использую пример кода из https://developers.google.com/sheets/api/samples/ranges

Вся программа выглядит следующим образом:

from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
import requests

# Setup the Sheets API
SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('sheets', 'v4', http=creds.authorize(Http()))

# Specific spreadsheet, actual ID hidden in this example
SPREADSHEET_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'


# Utility functions
def add_named_range():
    url = 'https://sheets.googleapis.com/v4/spreadsheets/%s:batchUpdate'%SPREADSHEET_ID
    data = '''{
      "requests": [
        {
          "addNamedRange": {
            "namedRange": {
              "name": "test",
              "range": {
                "sheetId": "%s",
                "startRowIndex": 1,
                "endRowIndex": 1,
                "startColumnIndex": 1,
                "endColumnIndex": 1,
              },
            }
          }
        }
      ]
    }
    '''%SPREADSHEET_ID
    response = requests.post(url, data=data)
    return response

def get_value_from_range(range_name, spreadsheetId=SPREADSHEET_ID):
    result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
                                        range=range_name).execute()
    if not 'values' in result.keys():
        return None
    else:
        return result['values'][0][0]

print(get_value_from_range('data'))
res = add_named_range()
print(res.text)

, а распечатка при запуске -


foo
{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

, поэтому программа может читать данные, но не писать, а добавлятьименованный диапазонЧто я здесь не так делаю?

...