使用Google Apps Script跨谷歌表格复制工作表报getRange为null错误如何解决
问题根因
触发报错的核心原因是ts变量的赋值时机错误:
- 你在调用
tss.insertSheet(nameOfCell)创建目标工作表之前,就先执行了var ts=tss.getSheetByName(nameOfCell),此时目标表格中还不存在对应名称的工作表,所以ts被赋值为null - 后续你虽然插入了新工作表,但没有重新给
ts变量赋值,最后调用ts.getRange()时自然就抛出了空值报错
修正后代码
function insertNewSheet() { var spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var sourceSheet = spreadSheet.getSheetByName('Query_Bando'); var nameOfCell = sourceSheet.getRange('A2').getValue(); var cellDataRegion = sourceSheet.getRange("A13").getDataRegion(); var lastRowSource = cellDataRegion.getLastRow(); var lastColumnSource = cellDataRegion.getLastColumn(); var A1Range = cellDataRegion.getA1Notation(); var SData = cellDataRegion.getValues(); var tss = SpreadsheetApp.openById("1bh563zHW0WMIcalWP2t3zG1_sK319JuMZwPsWhucKAs"); var ts = tss.getSheetByName(nameOfCell); // 仅目标表不存在时执行插入,避免重复创建报错 if (!ts) { ts = tss.insertSheet(nameOfCell); } ts.getRange(A1Range).setValues(SData); }
额外优化说明
- 移除了冗余的重复获取源表、重复获取范围的逻辑,代码运行效率更高
- 增加了目标工作表存在性判断,避免重复插入同名工作表抛出冲突错误
- 去掉了不必要的
activate()调用,Google Apps Script操作工作表不需要激活即可直接读写,减少不必要的接口调用
内容的提问来源于stack exchange,提问作者PROGETTAZIONE STUDIO GB
相关产品推荐
相关产品推荐

