метод spreadsheets.get не возвращает никакого фактического значения, просто форматирует

#python #google-sheets #google-sheets-api

#python #google-sheets #google-sheets-api

Вопрос:

Итак, я пытаюсь получить целые листы за один раз, потому что в противном случае я получаю слишком много запросов, и API блокирует меня. Я скопировал код в документации Google. К сожалению, в основном он просто возвращает мне такие вещи, как размер шрифта, цвет переднего плана, цвет переднего плана, курсив, зачеркивание, подчеркивание. В нем указано, верно это или нет, или характеристики. У меня есть удалить учетные данные = Нет, потому что это создало ошибки.
Надеюсь, вы сможете мне помочь. ЕСЛИ у вас есть другой способ ограничить запрос API, вы всегда можете мне сказать. Я тоже новичок в python.

     #from googleapiclient import discovery

# TODO: Change placeholder below to generate authentication credentials. See
# https://developers.google.com/sheets/quickstart/python#step_3_set_up_the_sample
#
# Authorize using one of the following scopes:
#     'https://www.googleapis.com/auth/drive'
#     'https://www.googleapis.com/auth/drive.file'
#     'https://www.googleapis.com/auth/drive.readonly'
#     'https://www.googleapis.com/auth/spreadsheets'
#     'https://www.googleapis.com/auth/spreadsheets.readonly'


service = discovery.build('sheets', 'v4', credentials=credentials)

# The spreadsheet to request.
spreadsheet_id = '1MJSV4j8iT5zoDTKIHfsYmFdmXFiP932UNbaP_t0rakw'  # TODO: Update placeholder value.

# The ranges to retrieve from the spreadsheet.
ranges = ['Mobile!A1-S200']  # TODO: Update placeholder value.

# True if grid data should be returned.
# This parameter is ignored if a field mask was set in the request.
include_grid_data = True  # TODO: Update placeholder value.

request = service.spreadsheets().get(spreadsheetId=spreadsheet_id, ranges=ranges, includeGridData=include_grid_data)
response = request.execute()

# TODO: Change code below to process the `response` dict:
pprint(response)
  

Ответ №1:

Я считаю, что ваша цель и ситуация следующие.

  • Ваша цель So I am trying to get a whole sheets at one because I otherwise get too many request and API is blocking me. .
    • В этом случае я не могу понять, хотите ли вы получить все значения ячеек со всех листов в электронной таблице Google или хотите получить все данные со всех листов в электронной таблице Google в виде данных JSON.
    • Итак, я хотел бы предложить выше 2 шаблонов.
  • Вы уже могли получать значения из таблиц Google с помощью Sheets API.
  • Вы хотите добиться этого с помощью googleapis для python.

Шаблон 1:

В этом шаблоне все значения ячеек со всех листов в электронной таблице Google извлекаются с использованием методов «spreadsheets.get» и «spreadsheets.values.batchGet».

Пример сценария:

 spreadsheet_id = '###'  # Please set Spreadsheet ID.

service = build('sheets', 'v4', credentials=creds)

# 1. Retrieve the title of all sheets.
fields = 'sheets(properties(title))'
res1 = service.spreadsheets().get(spreadsheetId=spreadsheet_id, fields=fields).execute()

# 2. Retrieve all values from all sheets.
ranges = [e['properties']['title'] for e in res1['sheets']]
res2 = service.spreadsheets().values().batchGet(spreadsheetId=spreadsheet_id, ranges=ranges).execute()
print(res2)
  
  • В этом скрипте сначала извлекаются все заголовки листов, и все значения со всех листов извлекаются с использованием заголовков листов.

  • Если вы хотите получить значения из определенных листов, вы также можете использовать следующий скрипт.

       ranges = ['Sheet1']
      res = service.spreadsheets().values().batchGet(spreadsheetId=spreadsheet_id, ranges=ranges).execute()
      print(res)
      

Шаблон 2:

В этом шаблоне все данные со всех листов в электронной таблице Google извлекаются как данные JSON с использованием метода «spreadsheets.get».

Пример сценария:

 spreadsheet_id = '###'  # Please set Spreadsheet ID.

service = build('sheets', 'v4', credentials=creds)

# 1. Retrieve data from all sheets.
fields = 'sheets'
res = service.spreadsheets().get(spreadsheetId=spreadsheet_id, fields=fields).execute()
print(res)
  
  • В этом скрипте sheets используется для fields получения всех данных со всех листов. Значение ответа представляет собой данные JSON.

  • Если вы хотите извлечь данные из определенных листов, пожалуйста, используйте ranges следующее.

       fields = 'sheets'
      ranges = ['Sheet1']
      res = service.spreadsheets().get(spreadsheetId=spreadsheet_id, ranges=ranges, fields=fields).execute()
      print(res)
      

Ссылки:

Комментарии:

1. Я запустил ваш первый метод, и он отлично сработал. Однако со вторым методом он просто возвращает мне формат (такие вещи, как: ‘padding’ и italic = false) вместо фактических значений. Есть ли какое-либо преимущество в json?

2. @TechFan_Theo Спасибо за ответ. Из I have run your first method and it worked nicely. , я мог понять, что мой сценарий предложения был полезен для вашей ситуации. Но, к сожалению, я не могу понять However with the second method, it just return me format (things like that : 'padding' and italic=false) instead of actual values.Is there any advantage to json ? . Прошу прощения за мой плохой английский. Могу я спросить вас о деталях вашей цели? Таким образом, я хотел бы изменить предложенный мной сценарий. Кстати, был ли ваш вопрос решен с помощью образца pattern1?

3. моя цель — выбрать строки, которые имеют определенные характеристики (у меня есть G листов с телефоном, подпиской на Интернет). Однако, если я запрашиваю у Api каждую строку, соответствующую моим характеристикам, он отправляет слишком много запросов, и API блокирует меня после 1000 запросов / 100 секунд. Итак, теперь я пытаюсь сначала извлечь таблицы Google, а затем выбрать строки, соответствующие моим критериям. . Я не прошу вас делать это здесь, просто лучший способ сделать это позже. Если вы не знаете, я просто сделаю это с помощью patern 1 тогда. К вашему сведению, конечная цель — создать компаратор подписки

4. Просто заметил, что первый метод в основном возвращает текст, подобный csv. Я не против этого, но отсутствие всего форматирования, которое я помещаю в G sheets, раздражает меня, я бы хотел сохранить его.

5. @TechFan_Theo Спасибо за ответ. В шаблоне 1 значения ячеек извлекаются в виде 2-мерного массива. В шаблоне 2 значения ячеек извлекаются как массив объекта JSON. В I'm now trying to first extract the google sheets and then selecting the rows that match my criterias. этом случае я подумал, что шаблон 1 может подойти. Например, когда значения представляют собой 2-мерный массив, это также можно напрямую использовать для метода values.update в API Sheets. Но если мое понимание вашего ответа неверно, я прошу прощения.