Apps Script结合Google Sheets循环跨行列比较值的问题
Google Apps Script跨行列数据比较解决方案
原代码
function ArrayRowCheck() { // Find the last row in the array const ss = SpreadsheetApp.getActiveSpreadsheet() const sheet = ss.getSheetByName("15min"); const lastRow = sheet.getRange("C2").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow().toFixed(); const z = sheet.getRange("C2:G" + sheet.getLastRow()) const a = z.getValues() for (let i = lastRow - 2; i >= 0; i--) { if (a[i][1] > a[i][4]) { console.log("True") }else { console.log("False") } } }
问题描述
我需要在for循环中重复比较两行的第1列和第4列,但不知道如何在循环中引入上一行数据。
示例需求
- 比较第10行第1列与第9行第4列
- 接着,比较第9行第4列与第8行第1列
- 然后,比较第8行第1列与第7行第4列
- 以此类推直到没有可比较的行,需要能访问每行的第1列和第4列数据
修改后的代码
function ArrayRowCheck() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getSheetByName("15min"); // 修正lastRow的获取:去掉toFixed(),getRow()返回数字,无需转字符串 const startCell = sheet.getRange("C2"); const lastRow = startCell.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); // 取C2到G列最后一行的所有数据 const dataRange = sheet.getRange(`C2:G${lastRow}`); const data = dataRange.getValues(); // 至少需要两行数据才能进行跨行比较 if (data.length < 2) { console.log("数据行数不足,无法进行比较"); return; } let i = data.length - 1; while (i >= 1) { // 第一步:当前行第1列 vs 上一行第4列 console.log(data[i][1] > data[i-1][4] ? "True" : "False"); i--; if (i < 1) break; // 第二步:当前行第4列 vs 上一行第1列 console.log(data[i][4] > data[i-1][1] ? "True" : "False"); i--; } }
代码说明
- 修正lastRow获取:移除
toFixed(),因为getRow()返回的是数字类型,转成字符串会导致后续索引计算错误。 - 数据合法性判断:先检查数据行数是否≥2,避免无意义的循环。
- 循环逻辑调整:使用
while循环实现交替比较逻辑:- 从最后一行(数组最大索引)开始,先比较当前行第1列与上一行第4列
- 索引减1后,再比较当前行第4列与上一行第1列
- 重复上述步骤直到索引不足1(无法再获取上一行数据)
内容的提问来源于stack exchange,提问作者Welchums
相关产品推荐
相关产品推荐

