2014-10-08 52 views
0

我是一个相当业余的编码员,但我有searched的解决方案,并没有拿出任何东西。凝聚相似和重复的代码

我在Google工作表中工作,我想要做的是将两个不同列中的同一行的值添加到一起。我尝试过数组,但无法获得第一个数组A添加到数组B中的第一个元素,所以我创建了代码波纹管,它工作正常,但它看起来太浪费了(我有21行添加在一起)。

您能否至少引导我到正确的地方去减肥?

var bd1 = data.getRange("K3"); 
var bn1 = data.getRange("H3").getValue(); 
var bo1 = data.getRange("K3").getValue(); 
var bs1 = bn1+bo1; 
bd1.setValue(bs1); 

var bd2 = data.getRange("K4"); 
var bn2 = data.getRange("H4").getValue(); 
var bo2 = data.getRange("K4").getValue(); 
var bs2 = bn2+bo2; 
bd2.setValue(bs2); 
... 
+1

看一看共同的模式。什么是固定的,什么是可变的?例如,似乎唯一可变的部分是单元格名称,更具体地说是索引。它似乎从初始值“x”(3)增加到某个值“y”。创造“重要”的事情很容易做到。看看'for'循环:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for。或者即使它不是一个连续的序列,你也可以是一个索引数组并迭代它。 – 2014-10-08 20:07:48

+0

这取决于它的哪些方面是动态的。例如,他们总是会是K * N *,H * N *,K * N *? – 2014-10-08 20:08:17

+0

仅供参考,“浓缩javascript”并不适合您的问题。 – 2014-10-08 20:11:49

回答

0

这里是去了解的一种方式:

var add2Cells = function(labelA, labelB) { 
    var cellA = data.getRange(labelA); 
    var cellB = data.getRange(labelB); 

    cellA.setValue(cellB.getValue() + cellA.getValue()); 
}; 

add2Cells("K3", "H3"); 
add2Cells("K4", "H4"); 

在这一点上,你可以使细胞对数组,你遍历和饲料到您的add2Cells功能。

+0

看起来很有希望,不会更好“var add2Cells = function(”but rather“function mainFunction(){function add2cells(){}}”? – Silveress 2014-10-08 20:22:35

+0

不太可能,但我没有看到所有的代码,我添加了第二次调用add2Cells以防万一使事情更清晰。 – 2014-10-08 20:23:58

+1

完美的作品xD – Silveress 2014-10-08 20:32:29

1

我知道您已接受最佳答案,但在Google Apps脚本中进行电子表格API调用时,只要有可能,就是best practice to do them in batches

你提到你这样做了21行;因此getValues()所有21行的我会第一个(将返回一个Javascript的2D阵列),做阵列使用纯JavaScript的处理,然后一气呵成setValues()

var values1 = data.getRange("H3:H23").getValues(); 
var range2 = data.getRange("K3:K23"); 
var values2 = range2.getValues(); 
for (var i = 0, length = values1.length; i < length; i++) 
    values2[i][0] += values1[i][0]; 
range2.setValues(values2);