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

使用splice移除二维数组指定元素时遇ReferenceError错误求助

问题解决:ReferenceError: array1 is not defined 及代码优化

错误根源

array1未定义的核心原因是工作表获取失败:你同时用openByUrl打开目标表格,又用getActiveSpreadsheet()去获取工作表,若当前激活的表格不是目标表格,sheet会返回null,后续sheet.getRange()执行出错,导致array1无法初始化。

除此之外代码还有几个隐性问题:

  • 数组索引越界:currentCellRowIndex是电子表格行号(从1开始),但数组索引从0开始,array1[currentCellRowIndex]会直接访问不存在的位置。
  • splice会修改原数组,无法生成你需要的副本。
  • getRange参数逻辑错误:getRange(6,2,currentCellRowIndex,6)会从第6行开始取currentCellRowIndex行数据,当当前行小于6时,取数范围无效。

修复后的代码

/**
* @customfunction
*/
function custom_function5() {
  // 直接用目标表格对象获取工作表,避免上下文冲突
  var spreadSheet = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/16li86UxKwDl4LUzgEdpfWdbZuDYcZ0t-adNJN56-bzQ/edit?pli=1#gid=0');
  var sheet = spreadSheet.getSheetByName("Scratch Pad");
  
  // 提前检查工作表是否存在
  if (!sheet) {
    throw new Error("找不到名为 'Scratch Pad' 的工作表");
  }

  var currentRow = SpreadsheetApp.getCurrentCell().getRow();
  var currentCol = SpreadsheetApp.getCurrentCell().getColumn();
  
  // 修正取数范围:从第6行到当前行,最多取currentRow-5行(若currentRow<6则取1行)
  var rowCount = Math.max(currentRow - 6 + 1, 1);
  var array1 = sheet.getRange(6, 2, rowCount, 6).getValues();
  Logger.log("原始数组: " + JSON.stringify(array1));

  // 转换为数组索引(从第6行开始,所以减6)
  var targetArrayRow = currentRow - 6;
  // 边界处理:当前行不在取数范围内时直接返回原数组
  if (targetArrayRow < 0 || targetArrayRow >= array1.length) {
    Logger.log("当前行不在数据范围内");
    return array1;
  }

  // 创建目标行的副本,避免修改原数组
  var processedRow = [...array1[targetArrayRow]];
  // splice从指定索引移除到末尾,省略第二个参数即可
  processedRow.splice(currentCol - 1);
  
  // 创建整个数组的副本并替换处理后的行
  var array2 = [...array1];
  array2[targetArrayRow] = processedRow;

  Logger.log("处理后数组: " + JSON.stringify(array2));
  return array2;
}

核心修复说明

  1. 统一表格上下文:用openByUrl获取的表格对象来获取工作表,避免activeSpreadsheet的上下文问题导致工作表获取失败。
  2. 索引转换:将电子表格行号转换为数组索引(currentRow - 6),解决越界问题。
  3. 副本创建:用扩展运算符(...)复制数组,确保splice只修改副本,不影响原数组。
  4. 范围有效性:修正getRange的行计数逻辑,确保取数范围始终有效。
  5. 错误提前拦截:增加工作表存在性检查,抛出明确错误便于排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:12:48