Получить filterViewId из запроса batchUpdate addFilterView - PullRequest
0 голосов
/ 12 февраля 2020

Я могу сделать запрос addFilterView, используя batchUpdate. Мой вопрос заключается в том, как я могу получить созданный filterViewId?

Вот код, который я использую:

 var filterSettings = {
  "title":criteria,
  "range": {
    "sheetId": sheetId,
    "startRowIndex": startRowIndex,
    "endRowIndex": 99999,
    "startColumnIndex": 0,
    "endColumnIndex": lastColumn
  },
    "criteria": {

    }
  };

  filterSettings.criteria[colNo] = {
         "condition": {
           "type": "TEXT_CONTAINS",
           "values": [
             {
               "userEnteredValue": criteria
             }
           ]
         }
       }

   var requests = [{
  "addFilterView": {
    "filter": filterSettings
  }
  }];

Sheets.Spreadsheets.batchUpdate(
        {
          requests:  requests 
        },
        ssId
        );

1 Ответ

3 голосов
/ 12 февраля 2020
  • Вы хотите извлечь filterViewId из созданного представления фильтра.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

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

Шаблон 1:

В этом шаблоне при запуске метода batchUpdate из возвращенного значения извлекается filterViewId.

Пожалуйста, измените следующим образом.

Модифицированный скрипт:

С:
Sheets.Spreadsheets.batchUpdate(
        {
          requests:  requests 
        },
        ssId
        );
Кому:
var res = Sheets.Spreadsheets.batchUpdate({requests:  requests}, ssId);
var filterViewId = res.replies[0].addFilterView.filter.filterViewId;
Logger.log(filterViewId)

Шаблон 2:

В этом шаблоне filterViewId получено с помощью метода spreadsheets.get в API Sheets. В этом случае результат извлекается по имени листа и заголовку представления фильтра.

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

function myFunction() {
  var sheetName = "Sheet1";  // Please set the sheet name.
  var filterViewTitle = "sampleName";  // Please set the filter view title.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var res = Sheets.Spreadsheets.get(ssId);
  var sheet = res.sheets.filter(function(s) {return s.properties.title == sheetName});
  if (sheet.length == 1) {
    sheet[0].filterViews.forEach(function(f) {
      if (f.title == filterViewTitle) {
        Logger.log(f.filterViewId)
      }
    });
  }
}

Примечание:

  • В приведенных выше сценариях: предполагается, что API-интерфейсы Sheets уже включены в службы Advanced Google.

Ссылка:

Если я неправильно понял ваш вопрос, а это не то направление, которое вы хотите, я прошу прощения.

...