我目前正试图将我在Google Scripts中编写的一些代码从很多字符中压缩到更少。
目前,我的代码看起来像这样 - 我需要为每一行写32次,变量cell2
和A2
将在此代码的每个块上增加1(最多{ {1}}和cell32
):
A32
然而,为了浓缩这一点,我尝试设置以下功能:
if (cell2 == condition1)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1);
else if(cell2 == condition1)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1);
else if(cell2 == condition2)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color2);
else if(cell2 == condition3)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color3);
else if(cell2 == condition4)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color4);
else if(cell2 == condition5)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color5);
else if(cell2 == condition6)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color6);
else if(cell2 == condition7)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color7);
else if(cell2 == condition8)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color8);
else if(cell2 == condition9)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color9);
else if(cell2 == condition10)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color10);
else if(cell2 == condition11)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color11);
else if(cell2 == condition12)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color12);
else if(cell2 == condition13)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color13);
else if(cell2 == condition14)
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color14);
else
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white');
我正在尝试通过使用while循环来完成设置大块文本,并在循环的每次迭代期间将function updateColor(range) {
var cell = range;
var condition = "condition";
var number = cell.replace("$B", "");
var i = 0;
if (cell == condition+i) {
spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1,3).getA1Notation()).setBackgroundColor(color1);
}
while (i<=14) {
else if(cell == condition+i) {
spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color+i);
}
i++;
}
else {
spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white');
}
内的变量递增1。我遇到的问题是代码没有运行 - 它挂在我认为是else if
的行上,因为我无法启动while循环中的else if
。 else if
已经在此函数之前定义,1到14。
我如何编写这个循环以便从底部生成顶部,在执行时生成较小的函数,或者是否无法压缩这个我正在尝试的方式?
感谢您的帮助。
答案 0 :(得分:0)
如果理解正确你想要的是减少你代码中if
语句的数量,如果是这样的话,我将做的是创建一个带有“条件”或条件标识符和颜色的哈希表这个:
var hasTable = {
"condition1": "#fff000",
"condition2": "#55BC00",
"condition3": "#ECECEC",
"condition4": "green"
/*... so on, so forth*/
};
if (hasTable[cell2])
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(hasTable[cell2]);
else
spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white');