2014-10-08 51 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);