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

Google Apps Script多表格数据合并脚本报错「Exception: Invalid argument: options. Should be of type: Map」求助

解决「Exception: Invalid argument: options. Should be of type: Map」错误及脚本优化

咱们一步一步拆解你的问题,先搞清楚错误根源,再修正脚本:

错误根源分析

你遇到的Invalid argument: options. Should be of type: Map错误,核心原因是调用setActiveSheet时传入了字符串(工作表名称),但这个方法要求传入的是Sheet对象而非字符串。除此之外,脚本里还有几个逻辑错误导致整体流程跑不通:

  • list数组构建错误:你把二维数组range用list.push([range])包装成了三维数组,循环时根本取不到正确的name和fileID
  • 操作目标电子表格的方式错误:用getFileById拿到File对象后,错误调用了不存在的setActiveSpreadsheet方法
  • 最后一行current.setValues代码不完整,没有执行实际的赋值操作

修正后的完整脚本

function make_new_contact_lists() { 
  // 提前定义目标汇总表格ID,让代码更清晰易维护
  const TARGET_SPREADSHEET_ID = "1IZBpDno4MOBeiGJeIKd2ykHpCr2359jhcV_SJpSuQ94";
  const targetSs = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID);
  
  // 获取当前脚本绑定表格的Sheet2数据
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sheet2");
  const lr = sheet.getLastRow();
  // 直接获取A2:B的所有行数据(二维数组),无需额外包装
  const list = sheet.getRange("A2:B" + lr).getValues();

  // 遍历每一行的名称与文件ID
  for (let i = 0; i < list.length; i++) { 
    const entry = list[i];
    const name = entry[0];
    const fileID = entry[1];

    // 跳过空行,避免因表格末尾无效行导致错误
    if (!name || !fileID) continue;

    try {
      // 在目标表格插入新工作表,并直接拿到工作表对象
      const newSheet = targetSs.insertSheet(name);
      
      // 打开要复制的源表格
      const sourceSs = SpreadsheetApp.openById(fileID);
      const sourceSheet = sourceSs.getSheetByName("Current Contacts");
      if (!sourceSheet) {
        console.log(`源表格${fileID}中未找到"Current Contacts"工作表,跳过该行`);
        continue;
      }

      // 获取源表格的目标范围数据
      const sourceValues = sourceSheet.getRange("A1:G3").getValues();

      // 将数据写入新工作表,自动匹配源数据的行列数
      newSheet.getRange(1, 1, sourceValues.length, sourceValues[0].length).setValues(sourceValues);
      
    } catch (err) {
      console.log(`处理第${i+1}行数据时出错:${err.message}`);
    }
  }
}

关键修正点说明

  • 修正数组结构:直接使用getValues()返回的二维数组,循环时entry[0]和entry[1]能正确拿到名称与文件ID
  • 移除不必要的激活操作:脚本不需要频繁设置激活表格/工作表,直接操作对象更高效
  • 修复电子表格打开逻辑:用SpreadsheetApp.openById(fileID)直接获取源表格对象,替代错误的File对象操作
  • 完善数据写入逻辑:明确指定写入范围,完整调用setValues()完成数据复制
  • 增加容错机制:加入空值判断和try-catch,避免个别行数据错误导致整个脚本中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:24:06