#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. Но если мое понимание вашего ответа неверно, я прошу прощения.