如何用Apps Script复制Google表格且不复制关联脚本文件?
复制Google表格但排除绑定脚本与自定义菜单的实现方法
核心思路
直接调用Spreadsheet.copy()会连带复制表格绑定的脚本和自定义菜单,所以改用创建全新空白表格 + 逐工作表复制内容/格式的方式,彻底避开脚本的复制。
实现代码
function copySpreadsheetWithoutScripts() { // 获取当前源表格 const sourceSs = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheets = sourceSs.getSheets(); // 创建空白新表格 const newSs = SpreadsheetApp.create("无脚本副本_" + sourceSs.getName()); // 删除新表格默认的空白工作表 newSs.deleteSheet(newSs.getSheets()[0]); // 逐个复制源工作表到新表格 sourceSheets.forEach(sheet => { const copiedSheet = sheet.copyTo(newSs); copiedSheet.setName(sheet.getName()); }); // 可选:同步源表格的权限(按需启用) // const sourceFile = DriveApp.getFileById(sourceSs.getId()); // const newFile = DriveApp.getFileById(newSs.getId()); // sourceFile.getPermissions().forEach(perm => { // if (perm.getEmail()) newFile.addEditor(perm.getEmail()); // }); Logger.log("无脚本副本已创建,ID:" + newSs.getId()); }
关键细节
Sheet.copyTo()方法仅复制工作表本身的内容、格式、公式、数据验证等,不会复制绑定在整个表格上的脚本和自定义菜单。- 先创建空白表格再删除默认工作表,保证新表格初始状态完全干净。
- 如果需要让新表格和源表格权限一致,可以取消注释代码中的权限同步部分。
内容的提问来源于stack exchange,提问作者Nick Pisca
相关产品推荐
相关产品推荐

