首页 > 解决方案 > Google 电子表格脚本(if 和复选框)

问题描述

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 并保留如果没有选中,则为整数列值。

标签: google-apps-scriptgoogle-sheets

解决方案


  • 您想从“C”、“D”和“G”列中检索值。
    • “C”和“D”列是复选框。
    • “G”列是数字。
  • 你想达到以下条件。
    • 当“C”和“D”列是truetrue时,您要添加50到“G”列的值。
    • 当“C”和“D”列是truefalse时,您要添加20到“G”列的值。
    • 当“C”和“D”列是falsetrue时,您要添加30到“G”列的值。
    • 当“C”和“D”列是falseandfalse时,您想使用“G”列的值。
  • 您想将结果值放入“P”列。
  • 您想使用 Google Apps 脚本实现此目的。
  • 您的问题sum始终sheet是“G”列的值。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

模式一:

在此模式中,您的脚本会被修改。

修改点:

  • 当使用 检索来自复选框的值时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 Apps 脚本中,即使在sumif 语句中声明了变量 of,sum也可以在 if 语句之外检索。所以脚本有效。但是从变量的范围来看,我建议sum像上面修改的脚本一样在 if 语句之外声明变量。

模式二:

在此模式中,您的目标是通过减少脚本的流程成本来实现的。在这种情况下,使用 检索“C”到“G”列的值getValues(),并处理检索到的值。然后,将结果值放入“P”列中setValues()。在您的情况下,当使用 和 代替getValues(),setValues()和for 循环时,可以降低流程成本。参考1 ,参考2map()getValue()setValue()

修改后的脚本:

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);
}

参考:


推荐阅读