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

Я пытаюсь создать кнопку с помощью скрипта Google на листе, которая создаст еще один отфильтрованный лист.Затем мне нужна ячейка A2, чтобы заполнить ее фильтрованной функцией IMPORTRANGE, которую я создал.Проблема заключается в том, что функция возвращает ошибку, в которой говорится: «При оценке FILTER совпадений не найдено».В нем говорится, что поскольку функция IMPORTRANGE возвращает опорную ошибку, поскольку доступ к исходной электронной таблице не был одобрен.Это требует, чтобы я вручную удалил функцию элементов FILTER, утвердил доступ между двумя листами, а затем повторно добавил элементы FILTER в функцию.Мне было интересно, есть ли какой-нибудь способ автоматически утвердить доступ между листами, чтобы при первом открытии вновь созданного листа все работало так, как должно.

Созданная мной функция листов Googleis =filter(IMPORTRANGE("https://docs.google.com/spreadsheets/d/103XMy_5qboN7sRcVbkJ0XAG7soNJdwURCv7cXJ4pS8E/edit#gid=0","Situations!A:Q"),(IMPORTRANGE("https://docs.google.com/spreadsheets/d/103XMy_5qboN7sRcVbkJ0XAG7soNJdwURCv7cXJ4pS8E/edit#gid=0","Situations!c:c")="9")+(IMPORTRANGE("https://docs.google.com/spreadsheets/d/103XMy_5qboN7sRcVbkJ0XAG7soNJdwURCv7cXJ4pS8E/edit#gid=0","Situations!g:g")="9"))

Функция фильтрует данные в исходной электронной таблице только по строкам, которые содержат 9 в любом столбце C или G

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

function createFilteredSheet(e) {
  SpreadsheetApp.getUi()
  .createMenu('Create Filtered Sheet')
  .addItem('Create Filtered Sheet', 'createFilteredSheet_')
  .addToUi();
}

function createFilteredSheet_() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var SituationsSheet = ss.getSheetByName('Situations');
  var sheetId = ss.getId();
  var labelArray = SituationsSheet.getRange('A1:Q1').getValues();
  
  var filterValue = Browser.inputBox('Create Filtered Sheet', 'Enter the value of what you would like to filter:', Browser.Buttons.OK_CANCEL);
  Logger.log(filterValue);
  if(filterValue == 'cancel') {return;}
  
  var shareEmail = [Browser.inputBox("Email Address to Share With", "Enter the email address you would like to share the sheet with:", Browser.Buttons.OK_CANCEL)];
  Logger.log(shareEmail);
  if(shareEmail == 'cancel') {return;}
  
  var createNewSheet = SpreadsheetApp.create(filterValue + ' Filter Sheet')
  .addEditors(shareEmail)
  .getId();
  var addFormula = SpreadsheetApp.openById(createNewSheet)
  .getRange('A2')
  .setValue('=filter(IMPORTRANGE("https://docs.google.com/spreadsheets/d/'+sheetId+'/edit#gid=0","Situations!A:Q"),(IMPORTRANGE("https://docs.google.com/spreadsheets/d/'+sheetId+'/edit#gid=0","Situations!c:c")="'+filterValue+'")+(IMPORTRANGE("https://docs.google.com/spreadsheets/d/'+sheetId+'/edit#gid=0","Situations!g:g")="'+filterValue+'"))');
  var addLabels = SpreadsheetApp.openById(createNewSheet)
  .getRange('A1:Q1')
  .setValues(labelArray);
  
}
...