You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错“Starting row of the range is too small”:Google Sheets脚本80行及以上失效

问题

我编写了一段Google Apps Script脚本,功能是从名为"Bag Label"的工作表获取项目,在"Inventory & Lots"工作表中查找其位置,并复制该位置右侧的部分单元格。脚本在"Inventory & Lots"工作表的1-79行可正常运行,但80行及以上无法工作,同时报错**"Starting row of the range is too small"**。

相关代码如下:

var ss=SpreadsheetApp.getActiveSpreadsheet();
var menuSheet=ss.getSheetByName("Bag Label");
var inventorySheet = ss.getSheetByName("Registered Lots");
var inventorySheetData = ss.getSheetByName("RegisteredLots - NO DEL");
var nextRow = inventorySheetData.getLastRow()+1;
var inventoryLots = ss.getSheetByName("Inventory & Lots");
var inventoryCalc = ss.getSheetByName("Inventory Calculation");
var inventoryCalcData = inventoryCalc.getRange(2,1,inventoryCalc.getLastRow()-1,4).getValues()
var inventoryData = inventoryLots.getRange(1,1,inventoryLots.getLastRow()-1,10).getValues()
var columnIndex = 0
var matchText = menuSheet.getRange("D2").getValue()
var kgNeed = menuSheet.getRange("AB2").getValue()
var index = inventoryData.findIndex(row => row[columnIndex] === matchText)
var rowNumber = index +1
var kg1 = inventoryLots.getRange(rowNumber,2).getValue();
var lot1 = inventoryLots.getRange(rowNumber,3).getValue();
var bb1 = inventoryLots.getRange(rowNumber,4).getValue();
var kg2 = inventoryLots.getRange(rowNumber,5).getValue();
var lot2 = inventoryLots.getRange(rowNumber,6).getValue();
var bb2 = inventoryLots.getRange(rowNumber,7).getValue();
var kg3 = inventoryLots.getRange(rowNumber,8).getValue();
var lot3 = inventoryLots.getRange(rowNumber,9).getValue();
var bb3 = inventoryLots.getRange(rowNumber,10).getValue();
问题根源

错误出在inventoryData的范围获取逻辑上:

var inventoryData = inventoryLots.getRange(1,1,inventoryLots.getLastRow()-1,10).getValues()

这里用getLastRow()-1限制了取数的行数,当工作表有80行数据时,你只加载了前79行到inventoryData数组里。如果目标项目在第80行,findIndex会返回-1(找不到匹配项),此时rowNumber = -1 + 1 = 0,而Google Sheets的行号最小为1,调用getRange(0, 2)就会触发"Starting row of the range is too small"错误。

修复方案
  1. 修正数据范围:
    去掉getLastRow()后面的-1,确保加载工作表的所有行数据:

    var inventoryData = inventoryLots.getRange(1,1,inventoryLots.getLastRow(),10).getValues()
    

    这样不管工作表有多少行,findIndex都能遍历所有数据,得到正确的索引,计算出的rowNumber也会是合法的行号(从1开始)。

  2. 增加错误处理:
    建议添加匹配失败的判断,避免后续代码因无效行号报错:

    var index = inventoryData.findIndex(row => row[columnIndex] === matchText)
    if (index === -1) {
      SpreadsheetApp.getUi().alert("未找到匹配的项目:" + matchText);
      return; // 终止脚本执行
    }
    var rowNumber = index +1;
    // 后续获取单元格值的代码...
    

内容的提问来源于stack exchange,提问作者Gerald Edwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:40:50