- Вы хотите получить значения из столбцов "C", "D" и "G".
- Столбцы "C" и "D" являются флажками.
- Столбец "G" является числами.
- Вы хотите для достижения следующих условий.
- Когда столбцы "C" и "D" равны
true
и true
, вы хотите добавить 50
к значению столбца "G". - Когда столбцы "C" и "D" имеют значения
true
и false
, к которым нужно добавить 20
к значению столбца "G". - Когда столбцы "C" и "D" равны
false
и true
, вы хотите добавить 30
к значению столбца "G". - Когда столбцы "C" и "D" равны
false
и false
, вы хотите использовать значение столбца "G".
- Вы хотите поместить значения результата в столбец "P".
- Вы хотите добиться этого, используя Google Apps Script.
- Ваша проблема в том, что
sum
всегда равно sheet
, что является значением столбца "G".
Если мой понимание правильно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Шаблон 1:
В этом шаблоне ваш сценарий изменен.
Точка изменения:
- Когда значение из флажка извлекается с помощью
getValue()
, это тип логического типа. В вашем скрипте строковые значения TRUE
и FALSE
используются в операторе if. Таким образом, var sum = sheet;
всегда выполняется. Я думаю, что это является причиной вашей проблемы.
Модифицированный скрипт:
Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.
С:
if(box == "TRUE" && box2 == "TRUE")
var sum = sheet+50;
else if(box == "TRUE" && box2 == "FALSE")
var sum = sheet+20;
else if(box == "FALSE" && box2 == "TRUE")
var sum = sheet+30;
else
var sum = sheet;
Кому:
var sum = sheet;
if(box === true && box2 === true)
sum = sheet+50;
else if(box === true && box2 === false)
sum = sheet+20;
else if(box === false && box2 === true)
sum = sheet+30;
Примечание:
- В скрипте Служб Google, даже если переменная
sum
объявлена в операторе if, sum
можно получить вне оператора if , Так что скрипт работает. Но из области видимости переменной я рекомендую объявлять переменную sum
в операторе if, как описано выше, в модифицированном скрипте.
Pattern 2:
В этом шаблоне Ваша цель достигается за счет снижения стоимости процесса из вашего сценария. В этом случае значения из столбцов «C» - «G» извлекаются с помощью getValues()
, а полученные значения обрабатываются. Затем полученные значения помещаются в столбец «P» с setValues()
. В вашей ситуации, когда вместо getValue()
, setValue()
и для l oop используются getValues()
, setValues()
и map()
, стоимость процесса может быть уменьшена. Ref1 , Ref2
Модифицированный скрипт:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("C4:G45").getValues();
var numbers = values.map(function([c, d,,,g]) {return [
(c === true && d === true) ? g + 50 :
(c === true && d === false) ? g + 20 :
(c === false && d === true) ? g + 30 : g
]});
sheet.getRange(4, 16, numbers.length, 1).setValues(numbers);
}
Ссылки: