Как включить базовый фильтр, используя Google API листы и по-прежнему видеть все значения? - PullRequest
0 голосов
/ 22 октября 2019

Мне удалось написать функцию R с помощью API setBasicFilter API листов Google, который включает базовый фильтр для диапазона ячеек, указанного пользователем. Однако, когда пользователь пытается «Фильтровать по значениям», никакие значения не отображаются.

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

Я подумал, что, возможно, он устанавливает фильтр поверх фильтра, и попытался сначала использовать clearBasicFilter перед отправкой setBasicFilter, но это не сработало.

Я попытался записать данные на листзатем включите фильтр и, наоборот, включите фильтр и затем запишите данные. По-прежнему выглядит так, как будто не было значений для фильтрации (хотя данные есть).

По сути, я пытаюсь достичь при записи данных на лист:

  1. Удалите все имеющиеся базовые фильтры.
  2. Запишите данные.
  3. Снова включите кнопки фильтров (в диапазоне, указанном пользователем функции).

Вот как выглядит мой вызов:

# for each row in the param table create a json body
for(row in nrow(param)){

body <- paste0('{"requests": [
  {
    "setBasicFilter": {
      "filter": {
        "range":{"sheetId": ', param$sheetId,
               ', "startRowIndex": ', param$startRow,
               ', "endRowIndex": ', param$endRow,
               ', "startColumnIndex": ', param$startCol,
               ', "endColumnIndex": ', param$endCol,
               '}}}}]}')
 }

Где таблица параметров выглядит следующим образом (и создается на основе входных данных пользователя для функции:

|sheetName |startRow |endRow |startCol |endCol |sheetId     |
|:---------|:--------|:------|:--------|:------|:-----------|
|Sheet1    |1        |0      |0        |11     |someId      |
|Sheet2    |0        |0      |0        |11     |someOtherId |

НесколькоСоздаются тела json, а затем я выполняю вызов с помощью метода batchUpdate от Google.

Я не получаю никаких ошибок, и фильтр включается там, где он мне нужен. Я хотел бы иметь возможность:

  1. Перейти к листу, на котором я только что включил фильтр
  2. Нажмите зеленую стрелку фильтра (которая уже будет в указанном диапазоне ячеек)
  3. И посмотрите списокиз всех возможных значений я могу отфильтровать этот столбец по

Прошу прощения за такое длинное описание. Я пытался быть максимально конкретным.

1 Ответ

0 голосов
/ 25 октября 2019

После повторного посещения моей функции я обнаружил, в чем проблема. Исправление заключалось в том, чтобы по умолчанию для endRowIndex использовалось максимальное количество строк, разрешенное таблицами Google, чтобы все значения были включены в диапазон фильтра.

Например, с измененной таблицей параметров, которая выглядит следующим образом:

|sheetName |startRow |endRow |startCol |endCol |sheetId     |
|:---------|:--------|:------|:--------|:------|:-----------|
|Sheet1    |1        |40000  |0        |11     |someId      |
|Sheet2    |0        |40000  |0        |18278  |someOtherId |

И тело json, которое выглядит следующим образом:

# for each row in the param table create a json body
for(row in nrow(param)){

body <- paste0('{"requests": [
  {
    "setBasicFilter": {
      "filter": {
        "range":{"sheetId": ', param$sheetId,
               ', "startRowIndex": ', param$startRow,
               ', "endRowIndex": ', param$endRow,
               ', "startColumnIndex": ', param$startCol,
               ', "endColumnIndex": ', param$endCol,
               '}}}}]}')
 }

Фильтр будетвключен с A2 на J2 в Sheet1 (все строки включены) и A1 до последнего столбца, разрешенного Google листов (все строки включены). Я все еще хочу, чтобы пользователь мог указывать конец строки, поэтому я оставлю это как опцию. Альтернативой может быть исключение конечной строки и столбца, проиндексированных в теле json, как таковых:

body <- paste0('{"requests": [
     {
        "setBasicFilter": {
          "filter": {
            "range":{"sheetId": ', param$sheetId,
                  ', "startRowIndex": ', param$startRow,
                   ', "startColumnIndex": ', param$startCol
                   '}}}}]}')
     }
...