Google Apps Script复制表格至其他文件夹时getId()类型错误
问题分析与解决
错误原因
你代码里的核心问题是混淆了「整个电子表格文件(Spreadsheet)」和「单个工作表(Sheet)」的概念:
SpreadsheetApp.getActiveSpreadsheet()获取的是整个电子表格文件,调用它的duplicateActiveSheet()方法,返回的是当前激活的单个工作表(Sheet对象)。- Sheet对象并没有
getId()方法,这个方法属于Spreadsheet(整个文件)或DriveFile对象,所以会抛出TypeError: newSheet.getId is not a function错误。 - 你的需求是复制整个电子表格文件到目标文件夹,而不是复制单个工作表,因此用错了方法。
修正后的代码
下面是实现「复制整个电子表格到指定文件夹」的正确代码:
function copySheetToFolder(folderId) { // 获取当前整个电子表格文件 const sourceSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 复制整个文件,自定义新文件名称(可根据需求修改) const newSpreadsheet = sourceSpreadsheet.copy(`${sourceSpreadsheet.getName()} 副本`); // 获取新文件的ID const newSpreadsheetId = newSpreadsheet.getId(); // 获取目标文件夹 const targetFolder = DriveApp.getFolderById(folderId); // 将新文件添加到目标文件夹(新文件会同时存在于原文件夹和目标文件夹) targetFolder.addFile(DriveApp.getFileById(newSpreadsheetId)); // (可选)如果需要将新文件从原文件夹移除,取消下面一行注释 // DriveApp.getFileById(newSpreadsheetId).getParents().next().removeFile(DriveApp.getFileById(newSpreadsheetId)); }
关键改动说明
- 用
copy()方法替代duplicateActiveSheet():copy()是Spreadsheet对象的方法,返回的是完整的新电子表格文件对象,支持调用getId()获取文件ID。 - 明确变量命名:用
sourceSpreadsheet、newSpreadsheet这类名称区分对象类型,避免混淆。 - 可选的文件夹移除操作:默认复制后的文件会保留在原文件夹,若需要彻底移动到目标文件夹,可启用注释的移除代码。
内容的提问来源于stack exchange,提问作者user4933
相关产品推荐
相关产品推荐

