3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
一種更有效的計(jì)算總和的方法是使用reduce,這樣你就可以擺脫for
循環(huán)。
可以僅使用函數(shù)計(jì)算總和reduce
。所有其他函數(shù):flat
,?map
,filter
用于確保數(shù)據(jù)正確,因?yàn)槲覀儾恢滥碾娮颖砀裎募侨绾螛?gòu)建的以及您使用的值是什么。有關(guān)每個(gè)步驟的詳細(xì)說(shuō)明,請(qǐng)參閱代碼注釋。
解決方案:
const netSquare = sheet_origin2.getRange('L2:L').getValues(). // get column L (12th column)
? ? ? ? ? ? ? ? ? ? flat(). // convert the 2D array to 1D array
? ? ? ? ? ? ? ? ? ? filter(v=>v!=''). // filter out empty cells
? ? ? ? ? ? ? ? ? ? map(v=>parseInt(v)); // convert string numbers to integers
const sum = netSquare.reduce((a,b)=>a+b); // add all numbers together
sheet_destination.getRange(sheet_destination.getLastRow(), 2, 1, 1).setValue(sum);

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
最后一行≠行數(shù),尤其是因?yàn)槟^(guò)了第一行。
.getValues()
返回一個(gè)二維數(shù)組,所以你需要使用netSquare[i][0]
您應(yīng)該在 for 循環(huán)中使用要迭代的數(shù)組的長(zhǎng)度,并確保您的索引不會(huì)越界。
function sum() {
? // ... define the sheets ...
? var lastRow = sheet_origin2.getLastRow();
? var numRows = lastRow - 1; // Subtract one since you're skipping the first row
? var netSquare = sheet_origin2.getRange(2, 12, numRows, 1).getValues();
? var sum = 0;
? for (var i=0; i<netSquare.length; i++) {
? ? sum += netSquare[i][0];
? }
? sheet_destination.getRange(sheet_destination.getLastRow(), 2, 1, 1).setValue(sum);
}

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
最短的修復(fù)方法是類型轉(zhuǎn)換,因?yàn)楫?dāng)您獲取數(shù)據(jù)時(shí)它們變成了字符串。
改變你的:
?sum?+=?netSquare[i];
到:
?sum?+=?parseInt(netSquare[i]);?//?if?whole?number ?sum?+=?parseFloat(netSquare[i]);?//?if?number?has?decimal
這強(qiáng)制該netSquare[i]
值的類型為整數(shù)/浮點(diǎn)數(shù),可以作為數(shù)字添加。當(dāng)我們確定 netSquare[i] 值都是數(shù)字時(shí),就不會(huì)有問(wèn)題。
對(duì)于可能出現(xiàn)的問(wèn)題,您可以在類型轉(zhuǎn)換非數(shù)字?jǐn)?shù)據(jù)時(shí)檢查可能的結(jié)果。
添加回答
舉報(bào)