Обновить электронную таблицу на основе другой электронной таблицы - PullRequest
1 голос
/ 01 октября 2019

Я готовлю свой JS, чтобы создать проект для моих учеников и учителей. Изучив документацию по Apps Script и вопросы типа этот , я застрял в создании сценария, позволяющего двум таблицам общаться друг с другом. В листе ответов будут заполнены формы с фамилией респондента и выбранными студентами из раскрывающегося списка («подключенные студенты»). На листе списка перечислены студенты в столбце B.

Получив новый ответ (т. Е. Новую последнюю строку), я хочу проанализировать список. Если имя ученика включено в отправку формы (столбец D листа «Ответы»), я хочу добавить имя учителя в столбец D списка.

В настоящее время я не получаю сообщение об ошибке,но мой тестовый ответ не отображается в реестре. Вся помощь будет хорошо принята. См. Изображения с примерами листов: г-н Кортазар представляет форму, в которой в качестве выбора выбран студент из реестра;экран запускается после представления его формы. В результате имя Кортазара появляется рядом со студентом из списка, который является частью его выбора, в столбце «Связи для взрослых».

function getData(){
      var date = new Date();
      var responsesSheet = SpreadsheetApp.openById('XXXXX').getSheetByName('Responses');
      var responsesLastRow = responsesSheet.getLastRow();    

      var teacher = responsesSheet.getRange(responsesLastRow, 3).getValue();

      var connectedStudents = responsesSheet.getRange(responsesLastRow, 4).getValue();

      var rosterSheet = SpreadsheetApp.openById('XXXXX').getSheetByName('roster');
      var rosterLastRow = rosterSheet.getLastRow();
      var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()

      var i;
      for (i = 0; i < responsesLastRow; i++) {
        if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
         rosterSheet.getRange((i + 1), 3).setValue(teacher);
        }  
      }
    }

enter image description here enter image description here

1 Ответ

2 голосов
/ 02 октября 2019
  • Извлечение значения последней строки из Responses листа.
  • Извлечение значений столбца "B" из roster листа.
  • Вы хотите поместитьзначение столбца "C" последней строки листа Responses для столбца "C" листа roster, когда значение столбца "B" листа roster включено в значениестолбец "D" из Responses листа.

Если мое понимание верно, как насчет этого ответа?

Точки модификации:

  • Я думаючто rosterSheet.getRange(responsesLastRow, 2).getValues() это rosterSheet.getRange(1, 2, rosterLastRow, 1).getValues().
    • Этим можно получить значения столбца "B" листа roster.
  • Когда вы проверяете, включено ли Smith, John F. в Smith, John F., Stephenson, Donald J., вы можете использовать indexOf().

Когда ваш скрипт изменяется, он выглядит следующим образом.

Измененный скрипт:

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

От:
var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()
var i;
for (i = 0; i < responsesLastRow; i++) {
  if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
   rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }  
}
До:
var rosterArray = rosterSheet.getRange(1, 2, rosterLastRow, 1).getValues();
var i;
for (i = 0; i < rosterLastRow; i++) { // <--- Modified
  if (rosterArray[i][0] && connectedStudents.indexOf(rosterArray[i][0]) > -1) {
    rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }
}

Ссылки:

Добавлено:

  • Вы хотите добавить значение в столбец "C" листа roster, когдазначение существует.

О вашем новом вопросе, если мое понимание верно, как насчет следующей модификации?

От:
var rosterArray = rosterSheet.getRange(responsesLastRow, 2).getValues()
var i;
for (i = 0; i < responsesLastRow; i++) {
  if (connectedStudents.substr(responsesLastRow, 4) == rosterArray[i]) {
   rosterSheet.getRange((i + 1), 3).setValue(teacher);
  }  
}
До:
var rosterArray = rosterSheet.getRange(1, 2, rosterLastRow, 2).getValues();
var i;
for (i = 0; i < rosterLastRow; i++) {
  if (rosterArray[i][0] && connectedStudents.indexOf(rosterArray[i][0]) > -1) {
    if (rosterArray[i][1] && rosterArray[i][1].indexOf(teacher) == -1) {
      rosterSheet.getRange((i + 1), 3).setValue(rosterArray[i][1] + "," + teacher);
    } else if (!rosterArray[i][1]) {
      rosterSheet.getRange((i + 1), 3).setValue(teacher);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...