Google Sheet API - проверка данных - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь установить правила проверки данных для моей текущей электронной таблицы.Одна вещь, которая помогла бы мне, была бы возможность просматривать правила в JSON из правил проверки данных, которые я уже установил (в пользовательском интерфейсе электронной таблицы или в вызове API).

Пример.

request = {
      "requests": [
        {
          "setDataValidation": {
            "range": {
              "sheetId": SHEET_ID,
              "startRowIndex": 1,
              "startColumnIndex": 0,
               "endColumnIndex":1
            },
            "rule": {
              "condition": {
                "type": "BOOLEAN"},
              "inputMessage": "Value MUST BE BOOLEAN",
              "strict": "True"
            }
          }
        }
      ]
    }

service.spreadsheets().batchUpdate(spreadsheetId=SPREADSHEET_ID body=request).execute()

Но какие вызовы API я использую для просмотра данных в этом диапазоне ячеек?Это полезно, если я устанавливаю правила проверки данных в электронной таблице и хочу посмотреть, как Google их интерпретирует.У меня много проблем с настройкой сложных Datavalidations через API.

Спасибо

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Чтобы получить только компоненты «Проверка данных» данной электронной таблицы, вы просто запрашиваете соответствующее поле в вызове spreadsheets.get:

service = get_authed_sheets_service_somehow()

params = {
  spreadsheetId: 'your ssid',
  #range: 'some range',
  fields: 'sheets(data/rowData/values/dataValidation,properties(sheetId,title))' }

request = service.spreadsheets().get(**params)
response = request.execute()

# Example print code (not tested :p )
for sheet in response['sheets']:
  for range in sheet['data']:
    for r, row in enumerate(range['rowData']):
      for c, col in enumerate(row['values']):
        if 'dataValidation' in col:
          # print "Sheet1!R1C1" & associated data validation object.
          # Assumes whole grid was requested (add appropriate indices if not).
          print(f'\'{sheet["properties"]["title"]}\'!R{r}C{c}', col['dataValidation'])

Указав поля,includeGridData не требуется для получения данных для каждой ячейки из запрошенного вами диапазона.Не предоставляя диапазон, мы нацеливаемся на весь файл.Эта конкретная спецификация полей запрашивает объект rowData.values.dataValidation и sheetId и title объекта properties для каждого листа в электронной таблице.

Вы можете использовать Google API Explorer для интерактивного определенияСоответствующая действительная спецификация «полей», и дополнительно изучите ответ: https://developers.google.com/apis-explorer/#p/sheets/v4/sheets.spreadsheets.get

Подробнее о работе спецификаторов «полей» читайте в документации: https://developers.google.com/sheets/api/guides/concepts#partial_responses

(Для определенных запросов записиспецификации полей не являются обязательными, поэтому в ваших интересах определить, как их эффективно использовать.)

0 голосов
/ 30 мая 2018

Я думаю, что нашел ответ.IncludeGridData=True в вашем spreadsheet().get

from pprint import pprint    
response = service.spreadsheets().get(
        spreadsheetId=SPREADSHEETID, fields='*',
        ranges='InputWorking!A2:A',includeGridData=True).execute()

Вы получаете структуру данных монстра обратно.Поэтому, чтобы посмотреть на самые первые данные в вашем диапазоне, вы можете сделать.

pprint(response['sheets'][0]['data'][0]['rowData'][0]['values'][0]['dataValidation'])


{'condition': {'type': 'BOOLEAN'},
 'inputMessage': 'Value MUST BE BOOLEAN',
 'strict': True}
...