如何在Google Apps Script中判断值是否处于两列数值区间内
Google Apps Script 实现页码匹配逻辑
这里提供两种实现方式,对应你的需求:
方式一:使用for循环(直观易读)
适合行数不多的场景,逻辑清晰,容易调试:
function getMatchingRow() { const folio = 48; // 目标页码 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的工作表名称"); // 替换为实际表名 const dataRange = sheet.getDataRange(); const data = dataRange.getValues(); // 获取所有行数据,二维数组格式 let matchingRow = null; // 存储匹配到的行 // 遍历每一行(从第2行开始,跳过表头,若没有表头则从索引0开始) for (let i = 1; i < data.length; i++) { const startPage = data[i][0]; // A列起始页码 const endPage = data[i][1]; // B列结束页码 if (folio >= startPage && folio <= endPage) { matchingRow = data[i]; // 匹配成功,保存整行数据 break; // 如果只需要第一个匹配项,找到后跳出循环;若要所有匹配项,去掉break并改用数组收集 } } // 后续逻辑:使用matchingRow处理 if (matchingRow) { const targetValue = matchingRow[2]; // 获取C列对应值,和原公式返回结果一致 console.log("匹配到的值:", targetValue); // 这里写你的后续处理代码 } else { console.log("未找到匹配的页码区间"); } }
方式二:使用数组filter方法(简洁高效)
类似你原公式的数组处理逻辑,代码更紧凑:
function getMatchingRowWithFilter() { const folio = 48; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的工作表名称"); const data = sheet.getDataRange().getValues(); // 跳过表头,筛选符合条件的行 const matchingRows = data.slice(1).filter(row => { const startPage = row[0]; const endPage = row[1]; return folio >= startPage && folio <= endPage; }); // 后续逻辑 if (matchingRows.length > 0) { // 原公式返回第一个匹配项的C列值,这里取第一个匹配行的C列 const targetValue = matchingRows[0][2]; console.log("匹配到的值:", targetValue); // 若要处理所有匹配行,遍历matchingRows即可 } else { console.log("未找到匹配的页码区间"); } }
注意事项
- 替换代码中的
"你的工作表名称"为实际的工作表名称 - 如果你的数据没有表头,把
slice(1)去掉,直接用data.filter(...) - 若需要返回所有匹配行,不要用
break,改用数组收集所有符合条件的行即可
内容的提问来源于stack exchange,提问作者Seb Mainguet
相关产品推荐
相关产品推荐

