Я пытаюсь найти, могу ли я попросить скрипт вычислить оценку, где за каждый хороший ответ он дает +1, а для каждого неправильного ответа вычитается -0,25. Расчет будет производиться в столбце C, как показано на скриншоте. В этом примере правильная оценка - 6,25 вместо 7.

Кстати, подсчет баллов относится к ключевым ответам в строке 2.

enter image description here

0
Mous 28 Июн 2020 в 05:15

1 ответ

Лучший ответ

Я верю вашей цели следующим образом.

  • Вы хотите вычислить значения столбца «C», проверив цвета фона каждой ячейки с помощью скрипта Google Apps.
    • Если цвет фона ячейки #3ace9c (зеленый), вы хотите добавить 1.
    • Если цвет фона ячейки #ff9900 (оранжевый), вы хотите уменьшить 0.25.
  • Вы хотите вычислить значения столбца «C», сравнив столбцы «D» и «M» в строке 2 (соответствующий ответ) и каждой строке (после строки 3) с помощью скрипта Google Apps.
    • Если столбцы с "D" по "M" в строке 2 одинаковы для каждой строки, вы хотите добавить 1.
    • Если столбцы с "D" по "M" в строке 2 НЕ одинаковы для каждой строки, вы хотите уменьшить 0.25.

Для этого, как насчет этого ответа?

Схема 1:

В этом шаблоне используются цвета фона. Последовательность этого примера сценария выглядит следующим образом.

  1. Подготовьте предмет с цветовыми кодами для «хороших» и «неправильных» ответов.
  2. Получите цвета фона из диапазона «D3: M» на листе.
  3. Рассчитайте значения, используя цвета объекта и фона.
  4. Поместите значения в столбец «C» на листе.

Пример сценария:

function myFunction() {
  const sheetName = "Sheet1";  // Please set the sheet name.

  // 1. Prepare an object including the color codes for "good" and "wrong" answers.
  const obj = {"#3ace9c": 1, "#ff9900": -0.25};  // Please set the color codes, if you change the color.

  // 2. Retrieve the background colors from the range of "D3:M" in the sheet.
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const backgrounds = sheet.getRange("D3:M" + sheet.getLastRow()).getBackgrounds();

  // 3. Calculate the values using the object and the background colors.
  const result = backgrounds.map(r => [r.reduce((c, e) => c += obj[e], 0)]);

  // 4. Put the values to the column "C" in the sheet.
  sheet.getRange(3, 3, result.length, 1).setValues(result);
}

Схема 2:

В этом шаблоне используется ссылающийся ответ строки 2. Последовательность этого примера сценария выглядит следующим образом.

  1. Получить значения из диапазона «A2: M» на листе.
  2. Получите соответствующий ответ.
  3. Вычислите значения каждого значения, сравнивая соответствующий ответ, и создайте массив, включающий значения результатов.
  4. Поместите значения в столбец «C» на листе.

Пример сценария:

function myFunction() {
  const sheetName = "Sheet1";  // Please set the sheet name.
  
  // 1. Retrieve values from the range of "A2:M" in the sheet.
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const values = sheet.getRange("A2:M" + sheet.getLastRow()).getValues();

  // 2. Retrieve the referring answer.
  const answers = values.shift();
  answers.splice(0, 3);

  // 3. Calculate the values of each values by comparing the referring answer, and create an array including the result values.
  const result = values.map(([,,c,...dm]) => [dm.reduce((c, e, i) => e == answers[i] ? c + 1 : c - 0.25, 0)]);

  // 4. Put the values to the column "C" in the sheet.
  sheet.getRange(3, 3, result.length, 1).setValues(result);
}

Ссылки:

2
Tanaike 28 Июн 2020 в 08:33