google-apps-script - 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 并保留如果没有选中,则为整数列值。
解决方案
- 您想从“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
andfalse
时,您想使用“G”列的值。
- 当“C”和“D”列是
- 您想将结果值放入“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 脚本中,即使在
sum
if 语句中声明了变量 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);
}
参考:
推荐阅读
- react-native - 错误:找不到变量:react-native 和 Android 中的 appName
- pandas - 对于下图,如何将 groupby 用于 pandas 中的多个列?
- c++ - cpp - 使用 lboost_system 制作 - 如何使其工作
- flutter - 如何在接收到另一个应用程序共享的文件时打开特定屏幕
- javascript - 警告:已超出最大更新深度。当组件在 useEffect 中调用 setState 时,可能会发生这种情况
- python - pyautogui p.typewrite 自循环
- spss - 对多个变量使用 char.sub 命令
- python - 使用问题标记提取已知两个标记之间的子字符串
- python - POS 后使用 Wordnet 对 pandas 列进行词形还原
- keras - keras 的 model.save 出现错误“无法腌制 _thread.RLock 对象”