Скрипт Google для автоматического заполнения формы условными логами c, которые не работают из-за того, что переменная не определена (даже если она выглядит определенной для меня) - PullRequest
0 голосов
/ 16 апреля 2020

Ниже приведен сценарий, написанный Джорданом Реа и предоставленный через github.

Я пытаюсь следовать его логике c, чтобы понять, как подойти к автоматическому заполнению формы вопросами, имеющими условную логику c поступает в различные разделы формы Google.

Код ломается в строке 35 "ReferenceError: форма не определена (строка 35, файл" RosterMaker ")

Line 35 = var classSection = form.addPageBreakItem().setTitle(className).setGoToPage(FormApp.PageNavigationType.SUBMIT);

Я уверен, что это простая ошибка, но я не могу понять это.

var ssID = "something";
var formID = "something"
//SpreadsheetApp.openById(ssID).getSheetByName("db_type");

function rosterMaker() {
  //spreadsheet id of the rosters
  var SHEET_ID = SpreadsheetApp.getActive();

  var ss = SpreadsheetApp.openById(ssID);
  var form = FormApp.openById((formID));


  //get only the sheets with 'Roster' in the title
  var sheets = ss.getSheets()
    .filter(function(sheet) {return sheet.getName().match(/Roster/gi);});


  //add multiple choice item
  var classSelect = form.addMultipleChoiceItem()
    .setTitle('Choose a class');
  Logger.log(classSelect);

  //get the class choices for the multiple choice item
  var classChoices = getClasses(sheets);

  //assign the choices to the classSelect variable
  classSelect.setChoices(classChoices);
}

function getClasses(sheets) {
  var classChoices = [];
  for(var i = 0; i < sheets.length; i++) {
    var className = sheets[i].getName();

    var classSection = form.addPageBreakItem()
      .setTitle(className)
      .setGoToPage(FormApp.PageNavigationType.SUBMIT);

    var students = getStudents(sheets[i]);

    var studentSelect = form.addCheckboxItem()
      .setTitle(className + ' absent')
      .setHelpText('Select the students who are absent from this class');

    var studentChoices = [];
    for(var j = 0; j < students.length; j++) {
      studentChoices.push(studentSelect.createChoice(students[j]));
    }

    studentSelect.setChoices(studentChoices);

    classChoices.push(classSelect.createChoice(className, classSection));
  }

  return classChoices;
}

function getStudents(sheet) {
  var studentValues = sheet.getDataRange().getValues();

  var students = [];
  for(var i = 1; i < studentValues.length; i++) {
    students.push(studentValues[i].join(' '));
  }
  return students;
}

1 Ответ

1 голос
/ 16 апреля 2020

Проверьте это:

var ssID = "something";
var formID = "something";

function rosterMaker() {
  var SHEET_ID = SpreadsheetApp.getActive();
  var ss = SpreadsheetApp.openById(ssID);
  var form = FormApp.openById((formID));
  var sheets = ss.getSheets().filter(function(sheet) {return sheet.getName().match(/Roster/gi);});
  var classSelect = form.addMultipleChoiceItem().setTitle('Choose a class');
  var classChoices = getClasses(sheets,form);//modified
  classSelect.setChoices(classChoices);
}

function getClasses(sheets,form) {//modified
  var classChoices = [];
  for(var i = 0; i < sheets.length; i++) {
    var className = sheets[i].getName();
    var classSection = form.addPageBreakItem().setTitle(className).setGoToPage(FormApp.PageNavigationType.SUBMIT);
    var students = getStudents(sheets[i]);
    var studentSelect = form.addCheckboxItem().setTitle(className + ' absent').setHelpText('Select the students who are absent from this class');
    var studentChoices = [];
    for(var j = 0; j < students.length; j++) {
      studentChoices.push(studentSelect.createChoice(students[j]));
    }
    studentSelect.setChoices(studentChoices);
    classChoices.push(classSelect.createChoice(className, classSection));
  }
  return classChoices;
}

function getStudents(sheet) {
  var studentValues = sheet.getDataRange().getValues();
  var students = [];
  for(var i = 1; i < studentValues.length; i++) {
    students.push(studentValues[i].join(' '));
  }
  return students;
}
...