Я пытаюсь найти, могу ли я попросить скрипт вычислить оценку, где за каждый хороший ответ он дает +1, а для каждого неправильного ответа вычитается -0,25. Расчет будет производиться в столбце C, как показано на скриншоте. В этом примере правильная оценка - 6,25 вместо 7.
Кстати, подсчет баллов относится к ключевым ответам в строке 2.
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
.
- Если столбцы с "D" по "M" в строке 2 одинаковы для каждой строки, вы хотите добавить
Для этого, как насчет этого ответа?
Схема 1:
В этом шаблоне используются цвета фона. Последовательность этого примера сценария выглядит следующим образом.
- Подготовьте предмет с цветовыми кодами для «хороших» и «неправильных» ответов.
- Получите цвета фона из диапазона «D3: M» на листе.
- Рассчитайте значения, используя цвета объекта и фона.
- Поместите значения в столбец «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. Последовательность этого примера сценария выглядит следующим образом.
- Получить значения из диапазона «A2: M» на листе.
- Получите соответствующий ответ.
- Вычислите значения каждого значения, сравнивая соответствующий ответ, и создайте массив, включающий значения результатов.
- Поместите значения в столбец «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);
}
Ссылки:
Похожие вопросы
Новые вопросы
google-apps-script
Используйте для вопросов о Google Apps Script, серверной платформе Google для облачных сценариев на основе Javascript для автоматизации задач в продуктах Google и сторонних службах. Используйте в дополнение к релевантным тегам продукта (например, [google-sheets], [google-docs]) или API (например, [google-drive-api]), где это применимо.