Google Apps Script文件复制后共享报错求助
解决Google Apps Script中addEditor参数不匹配的问题
错误原因
你遇到的Exception: The parameters (SpreadsheetApp.Range) don't match the method signature for DriveApp.File.addEditor错误,本质是参数类型不匹配:
DriveApp.File.addEditor()方法要求传入的是字符串格式的邮箱地址,而你代码里的email变量是一个SpreadsheetApp.Range对象(对应C2:C5的单元格范围),不是具体的邮箱字符串,所以调用时会报错。
修复方案
需要先获取邮箱范围的具体数值,再在循环中对应索引取出单个邮箱地址传给addEditor(),同时可以增加空值判断避免额外错误。
修复后的完整代码
function createCopy() { // 替换为你的源文件ID let file = DriveApp.getFileById("ID of file to copy"); // 替换为你的表格URL和工作表名称 let sheet = SpreadsheetApp.openByUrl('Sheet with names and emails').getSheetByName("Sheet1"); // 获取文件名范围(D2:D5)的所有值(二维数组) let nameValues = sheet.getRange('D2:D5').getValues(); // 获取邮箱范围(C2:C5)的所有值(二维数组) let emailValues = sheet.getRange('C2:C5').getValues(); // 替换为你的目标文件夹ID let folder = DriveApp.getFolderById("Destination Folder"); for(let i = 0; i < nameValues.length; i++) { // 从二维数组中取出当前行的文件名和邮箱(注意[row][0]的结构) let fileName = nameValues[i][0].toString(); let userEmail = emailValues[i][0].toString(); // 跳过空文件名或空邮箱的行,避免无效操作 if (!fileName || !userEmail) continue; // 创建文件副本,并为指定邮箱添加编辑权限 let copiedFile = file.makeCopy(fileName, folder); copiedFile.addEditor(userEmail); } }
关键修改点
- 将
let email = sheet.getRange('C2:C5')改为let emailValues = sheet.getRange('C2:C5').getValues(),获取邮箱的数值数组(而非Range对象) - 循环中通过
emailValues[i][0].toString()提取当前索引对应的单个邮箱字符串 - 增加空值判断,跳过单元格为空的行,避免因空值导致的错误
内容的提问来源于stack exchange,提问作者Iggy Hannon
相关产品推荐
相关产品推荐

