Скрипт Google Spreadsheet (если и флажки) - PullRequest
1 голос
/ 19 января 2020
function MyFunction() {
  for(x=4;x<=45;x++)
  {
    var sheet = SpreadsheetApp.getActiveSheet().getRange(x, 7).getValue();
    var box = SpreadsheetApp.getActiveSheet().getRange(x, 3).getValue();
    var box2 = SpreadsheetApp.getActiveSheet().getRange(x, 4).getValue();

    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;

    SpreadsheetApp.getActiveSheet().getRange(x, 16).setValue(sum);  
  }
}

столбцы 3 и 4 содержат флажки. Столбец 7 содержит целочисленные значения. Идея состоит в том, чтобы добавить +50, если проверены оба флажка в его строке, +20, если проверен только первый, +30, если второй один проверяется и сохраняет значение целочисленного столбца, если ни один не отмечен.

1 Ответ

1 голос
/ 20 января 2020
  • Вы хотите получить значения из столбцов "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);
}

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...