如何重命名从其他电子表格复制的多个工作表并覆盖同名已有表
解决代码
function copySheetsToNewSS() { var ss = SpreadsheetApp.getActive(); // 目标表仅需打开一次,无需放在循环内重复调用 var destination = SpreadsheetApp.openById("1goBAwtP1clFCt_UQEn2DEPgGQzgSJ5vppG52ouYRGI"); var sourceSheets = ss.getSheets(); for(var i = 0; i < sourceSheets.length; i++){ var sourceSheet = sourceSheets[i]; var sheetName = sourceSheet.getName(); // 检查目标表是否存在同名工作表,存在则直接删除实现覆盖 var existingSheet = destination.getSheetByName(sheetName); if (existingSheet) { destination.deleteSheet(existingSheet); } // copyTo方法返回新复制的工作表实例,直接重命名为原表名称即可 var newCopiedSheet = sourceSheet.copyTo(destination); newCopiedSheet.setName(sheetName); } // 删除默认Sheet1前先判断是否存在,避免触发报错 var defaultSheet = destination.getSheetByName("Sheet1"); if (defaultSheet) { destination.deleteSheet(defaultSheet); } }
关键修改说明
- 将目标表初始化逻辑移到循环外,避免每次循环重复打开目标表,大幅提升运行效率
- 每次复制前先校验目标表是否存在同名工作表,提前删除实现覆盖效果
- 调用
copyTo()方法后直接获取新生成的工作表实例,调用setName()修改为原表名称,解决默认生成「副本」后缀的问题 - 新增默认Sheet1存在性判断,避免目标表本身无默认Sheet1时运行报错
内容的提问来源于stack exchange,提问作者prachi arora
相关产品推荐
相关产品推荐

