Как получить значения, связанные с массивом, на основе имени строки этого массива? - PullRequest
0 голосов
/ 02 февраля 2020

Я школьный учитель, пытаюсь разработать электронную таблицу с оценками по математике. Чтобы сделать его более автоматизированным, я пишу скрипт Google Apps, который извлекает математические стандарты для модуля на основе имени этого модуля. Я хочу, чтобы мой сценарий:

  1. Считал имя строки модуля (т.е. "Module_1") из ячейки на одном листе ("Активный набор данных")
  2. Найдите стандарты связанный с именем этого модуля на другом листе («Стандарты»)
  3. Вставка стандартов в заданный диапазон (standRange) в исходном листе

Я знаю, что мог бы, вероятно, достигли желаемого результата, используя проверку данных и именованные диапазоны, но я хотел бы сделать это программно. Поэтому я назначил стандарты для каждого модуля переменной, а затем поместил эти переменные в массив (модули). Мой сценарий должен был l oop пройти через массив и извлечь стандарты на основе имени модуля, который я искал. Я признаю, что такой подход не будет работать, потому что я сравниваю строку с именем переменной.

function standardSelect() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var entrySheet = ss.getSheetByName("Active Data Set");
  entrySheet.getRange("E2").copyValuesToRange(entrySheet, 2, 2, 1, 1); //this is the name of the Module I want to pull standards for 
  var moduleName = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Active Data Set").getRange("E2").getValue();
  var standRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Active Data Set").getRange("B2:D2"); //this is the place where I want to paste the standards 


  var stand = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Standards");

  var Module_1 = stand.getRange("D5:F5").getValues(); //These are the standards associated with each module 
  var Module_2 = stand.getRange("J5:L5").getValues();
  var Module_3 = stand.getRange("O5:Q5").getValues();
  var Module_4 = stand.getRange("R5:T5").getValues();
  var Module_5 = stand.getRange("U5:V5").getValues();


  var Modules = [Module_1, Module_2, Module_3, Module_4, Module_5];
  var ModuleNames = ["Module_1", "Module_2", "Module_3", "Module_4", "Module_5"];

  for (var i = 0; i < Modules.length; i++) {
    if (moduleName == Modules[i]) {
      standRange.setValues(Modules[i])
    }
  }

}

Я подумал, что если я сделаю еще один массив с именами всех модулей, я мог бы как-то их соединить, но я действительно не знаю, как это сделать. По сути, мне нужно вызвать переменную внутри моего скрипта на основе строки внутри моей таблицы. Есть ли способ сделать это, используя пары ключ-значение? Сервис ScriptProperties? Я немного застрял, поэтому любые идеи будут оценены!

1 Ответ

1 голос
/ 02 февраля 2020

Вот решение:

var Modules = [Module_1,Module_2, Module_3,Module_4,Module_5]; 
var ModuleNames = ["Module_1","Module_2","Module_3","Module_4","Module_5"];

for(var i = 0; i< Modules.length; i++){
  if(moduleName==ModuleNames[i]){standRange.setValues(Modules[i])}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...