从表格获取ID变量调用SpreadsheetApp.openById失败问题排查
问题分析与解决方案
我来帮你搞定这个问题~你的代码卡壳在第4、5行,核心原因是用错了获取单元格值的方法,具体拆解如下:
关键问题点
getValues() 方法返回的是二维数组格式,哪怕你只取单个单元格(比如A3),它返回的结果也是类似 [["目标表格ID"]] 的嵌套数组。但 SpreadsheetApp.openById() 要求必须传入纯字符串类型的表格ID,直接把数组传进去自然会调用失败。而你直接写死ID时,传入的是纯字符串,所以能正常运行。
修正后的完整代码
var sss = SpreadsheetApp.getActiveSpreadsheet(); var Brand1 = sss.getSheetByName('Brand 1'); var Brand1Data = Brand1.getRange('a5:z').getValues(); // 这里也建议改成getValues(),因为a5:z是多单元格区域,getValue()只会取第一个单元格的值 var key1 = Brand1.getRange('a3').getValue(); // 把getValues()换成getValue(),直接获取单个单元格的字符串值 var Brand1Spreadsheet = SpreadsheetApp.openById(key1); var BrandDatabase = Brand1Spreadsheet.getSheetByName('Database'); BrandDatabase.getRange(BrandDatabase.getLastRow()+1,3,Brand1Data.length, Brand1Data[0].length).setValues(Brand1Data);
额外小提示
第3行的 getValue() 也需要调整:如果你想获取A5到Z列的所有数据,必须用 getValues(),因为 getValue() 仅会返回该区域左上角第一个单元格的内容,而 getValues() 才会返回整个区域的二维数组,这样后续的 setValues() 才能正确批量写入数据。
内容的提问来源于stack exchange,提问作者Bryan Mitchiner
相关产品推荐
相关产品推荐

