迭代 Google Sheets 中的范围以根据条件生成总和

问题描述 投票:0回答:2

如果已经提出这个问题,请提前致歉。随着 Mint 的关闭并迫使我们转向 Credit Karma,我希望在 Google Sheets 中构建一个半自动化的预算和支出跟踪器,并且希望有人能帮助我弄清楚如何制定 forEach 循环脚本。

我想要循环的范围中有四列:月份、费用、金额、类别。我找到了一个循环遍历范围的脚本(如下)。我需要帮助的是生成一个 if 语句,该语句将识别每行中的值,并且如果满足条件,则将每个满足条件的“金额”列中的值相加。

理想情况下,RETURN VALUES HERE 行将执行以下操作:“如果一行的“月份”列中有“四月”,“类别”列中有“杂货”,则将该行的“金额”单元格添加到总和中。”希望这是有道理的。我是脚本编写新手,非常感谢我能得到的任何帮助。

function logAprilGroceries() { var range = SpreadsheetApp.getActive().getRangeByName("Statements"); var values = range.getValues(); values.forEach(function(row) { row.forEach(function(col) { RETURN VALUES HERE; }); }); }
    
javascript loops if-statement google-sheets google-apps-script
2个回答
0
投票
根据

https://developers.google.com/apps-script/guides/sheets 上的建议,您应该了解 Google Apps 脚本使用 JavaScript 作为编程语言,并且在使用表格时处理 arrays 非常常见.

我认为你不需要内循环(

row.forEach(function(col){...}

);相反,请使用数组索引,即 
row[0]
 表示第一列,
row[1]
 表示第二列,依此类推。

关于

if 语句,语法为 if(expression){...}

,其中表达式可能使用比较运算符,即 
===
(等于)、
!==
(不等于)。

有很多资源可以学习 JavaScript 基础知识。我喜欢 FreeCodeCamp 的 JavaScript 课程,因为它是免费的,并且专注于“普通 JavaScript”,没有 API、HTML 以及 Google Apps Script 服务器端脚本中未使用的其他内容。


0
投票
此函数假设它将传递“月份”和“类别”参数。您也可以在循环之前将它们声明为常量。

function totalByMonthAndCategory(month, category) { const range = SpreadsheetApp.getActive().getRangeByName("Statements"); const values = range.getValues(); let sum = 0; for (let i = 0; i < values.length; i++) { let cols = values[i]; if ((cols[0] == month) && (cols[2] == category)) { sum += cols[3]; } } return sum; }
    
© www.soinside.com 2019 - 2024. All rights reserved.