Скрипт не будет правильно открывать другую таблицу - PullRequest
0 голосов
/ 07 июня 2019

Мой скрипт завершает работу, когда я использую openById ().

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

Я сократил свой код до минимума и сузил проблему с помощью регистратора. Я не совсем уверен, что здесь происходит, но ничего после того, как мое назначение переменных openById () не было зарегистрировано.

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = e.range;
  //var newId;
  //var newName;
  //I've removed the last two variables for debugging purposes. They'll be used to name the new spreadsheet.

  Logger.log("1");

  //Check if edit occurred in relevant range
  if((range.getColumn() !== 1) && (range.getColumn() !== 2)) return;

  Logger.log("2");

  //Check if both columns were filled after edit
  if((range.getColumn() == 1) && (range.offset(0,1).isBlank() == true)) return;
  if((range.getColumn() == 2) && (range.offset(0,-1).isBlank() == true)) return;

  Logger.log("3");

  //Temporarily removed but this is for naming the new spreadsheet
  /*if(range.getColumn() == 1) newName = range.offset(0,7).getValue();
  if(range.getColumn() == 2) newName = range.offset(0,6).getValue();*/

  //Check whether the edits occurred on the jobs list or receptions list (indicated by '2' or '3' in L1)
  if(sheet.getRange('L1').getValue() == 2) newJob();
  if(sheet.getRange('L1').getValue() == 3) newReception();

  Logger.log("11");

  //Once again, only temporarily removed.
  /*SpreadsheetApp.openById(newId).rename(newName);*/


}

function newJob() {
  Logger.log("4");

  var templateSS = SpreadsheetApp.openById("Spreadsheet ID Redacted");
  Logger.log("5");

  var newSS = templateSS.copy("Untitled Job");
  Logger.log("6");

  var originalFolder = DriveApp.getFolderById("Folder ID Redacted");
  Logger.log("7");

  var newSSFile = DriveApp.getFileById(newSS.getId());
  Logger.log("8");

  //Copy file to the correct directory and delete the instance created in root
  originalFolder.addFile(newSSFile);
  Logger.log("9");

  DriveApp.getRootFolder().removeFile(newSSFile);
  Logger.log("10");

  return(newSSFile);

} 

/*Didn't bother pasting newReception here because it's nearly identical to newJob*/

Регистратор должен регистрировать все номера 1-11. Это только логирование 1,2,3,4. Что-то останавливает сценарий после пункта № 4 и до пункта № 5.

1 Ответ

0 голосов
/ 07 июня 2019

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

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

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('onEdit')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...