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
相关产品推荐
相关产品推荐

