亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用谷歌應用程序腳本對列函數中的所有行求和

使用谷歌應用程序腳本對列函數中的所有行求和

牛魔王的故事 2023-06-15 17:23:07
我有一列"Net Sales",我試圖在谷歌工作表中總結該列中的所有值,但使用谷歌應用程序腳本。凈銷售額的數據會發生變化,所以我盡量抽象。這是我到目前為止的功能,總和的輸出顯示在一個單獨的電子表格中。這個函數實際上并沒有把所有的銷售額加起來,而是把所有的數字放在一起。例如,如果 Net Sales 列中的行是 100、200 和 50,則輸出將是 10020050 而不是 350。我如何獲得一個函數來實際將這些數字相加?//sum of all net sales (not working)var netSquare = sheet_origin2.getRange(2, 12, sheet_origin2.getLastRow(), 1).getValues();  var sum = 0;  for (var i=0; i<=sheet_origin2.getLastRow(); i++) {    sum += netSquare[i];  }  sheet_destination.getRange(sheet_destination.getLastRow(), 2, 1, 1).setValue(sum);
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

一種更有效的計算總和的方法是使用reduce,這樣你就可以擺脫for循環。

可以僅使用函數計算總和reduce。所有其他函數:flat,?map,filter用于確保數據正確,因為我們不知道您的電子表格文件是如何構建的以及您使用的值是什么。有關每個步驟的詳細說明,請參閱代碼注釋。

解決方案:

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);


查看完整回答
反對 回復 2023-06-15
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

  1. 最后一行≠行數,尤其是因為您跳過了第一行。

  2. .getValues()返回一個二維數組,所以你需要使用netSquare[i][0]

  3. 您應該在 for 循環中使用要迭代的數組的長度,并確保您的索引不會越界。

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);

}


查看完整回答
反對 回復 2023-06-15
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

最短的修復方法是類型轉換,因為當您獲取數據時它們變成了字符串。

改變你的:

?sum?+=?netSquare[i];

到:

?sum?+=?parseInt(netSquare[i]);?//?if?whole?number
?sum?+=?parseFloat(netSquare[i]);?//?if?number?has?decimal

這強制該netSquare[i]值的類型為整數/浮點數,可以作為數字添加。當我們確定 netSquare[i] 值都是數字時,就不會有問題。

對于可能出現的問題,您可以在類型轉換非數字數據時檢查可能的結果。


查看完整回答
反對 回復 2023-06-15
  • 3 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號