能否通过.copy()方法仅复制电子表格的可见工作表?
仅复制电子表格可见工作表的可行方案
原生的copy()方法无法直接指定只复制可见工作表,不过可以通过以下方式实现需求:
- 先创建一个空白的目标电子表格
- 遍历原文件的所有工作表,筛选出可见的工作表
- 将筛选后的可见工作表逐个复制到目标文件中
代码示例
function copyOnlyVisibleSheets(destName) { const sourceSs = SpreadsheetApp.getActiveSpreadsheet(); // 创建空白目标电子表格 const destSs = SpreadsheetApp.create(destName); // 删除目标文件默认的空白工作表(可选) const defaultSheet = destSs.getSheetByName('Sheet1'); if (defaultSheet) { destSs.deleteSheet(defaultSheet); } // 遍历原文件所有工作表,复制可见表 const sourceSheets = sourceSs.getSheets(); sourceSheets.forEach(sheet => { // 判断工作表是否可见:排除用户手动隐藏和系统隐藏的表 if (!sheet.isSheetHiddenByUser() && !sheet.isSheetHidden()) { sheet.copyTo(destSs).setName(sheet.getName()); } }); return destSs; }
说明
isSheetHiddenByUser()用于判断工作表是否被用户手动隐藏,isSheetHidden()用于判断是否被系统隐藏(比如表单自动生成的响应表),可根据实际需求调整判断条件- 该方案直接只复制可见工作表,无需先复制整个文件再删除隐藏表,避免了多余的操作步骤
- 操作过程不会改动原文件,完全符合需求
内容的提问来源于stack exchange,提问作者alsanmph
相关产品推荐
相关产品推荐

